From 3963d6363a2501ccf38d8af9e72d6f0131d8e060 Mon Sep 17 00:00:00 2001 From: James Kolpack Date: Fri, 30 Nov 2012 21:35:06 -0500 Subject: [PATCH] Initial --- .gitattributes | 22 + .gitignore | 163 + ETHRAVehicles2011-07-30.xls | Bin 0 -> 26624 bytes MileageTraker.sln | 26 + MileageTraker.vsmdi | 6 + Notes/2011ETHRAvehicles.xls | Bin 0 -> 41472 bytes Notes/Header.psd | Bin 0 -> 208446 bytes Notes/myImage (3).png | Bin 0 -> 75231 bytes Web.Tests/CreateLogControllerTest.cs | 30 + Web.Tests/DAL/VehicleImporterTests.cs | 31 + Web.Tests/DAL/Vehicles.xls | Bin 0 -> 41472 bytes Web.Tests/Properties/AssemblyInfo.cs | 35 + Web.Tests/Utility/AlgorithmsTests.cs | 74 + Web.Tests/Utility/CustomExtensionsTests.cs | 69 + .../ViewModels/CreateLogViewModelTests.cs | 71 + Web.Tests/Web.Tests.csproj | 89 + Web.Tests/packages.config | 5 + Web/App_Data/2011ETHRAvehicles.xls | Bin 0 -> 41472 bytes Web/App_Data/Cities.xls | Bin 0 -> 34816 bytes Web/Content/Background.png | Bin 0 -> 3935 bytes Web/Content/BlackBerry.css | 4 + Web/Content/CreateLog/BlackBerry.css | 25 + Web/Content/CreateLog/Index.css | 22 + Web/Content/Header.png | Bin 0 -> 11454 bytes Web/Content/Header_white.png | Bin 0 -> 11513 bytes Web/Content/Rainbow.png | Bin 0 -> 1205 bytes Web/Content/Site.css | 465 + Web/Content/Site.min.css | 253 + Web/Content/VehicleColors.css | 84 + Web/Content/spinner.gif | Bin 0 -> 2037 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../base/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes Web/Content/themes/base/jquery-ui.css | 466 + .../themes/base/jquery.ui.accordion.css | 19 + Web/Content/themes/base/jquery.ui.all.css | 11 + .../themes/base/jquery.ui.autocomplete.css | 53 + Web/Content/themes/base/jquery.ui.base.css | 21 + Web/Content/themes/base/jquery.ui.button.css | 38 + Web/Content/themes/base/jquery.ui.core.css | 38 + .../themes/base/jquery.ui.datepicker.css | 68 + Web/Content/themes/base/jquery.ui.dialog.css | 21 + .../themes/base/jquery.ui.progressbar.css | 11 + .../themes/base/jquery.ui.resizable.css | 20 + .../themes/base/jquery.ui.selectable.css | 10 + Web/Content/themes/base/jquery.ui.slider.css | 24 + Web/Content/themes/base/jquery.ui.tabs.css | 18 + Web/Content/themes/base/jquery.ui.theme.css | 247 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../themes/base/minified/jquery-ui.min.css | 5 + .../base/minified/jquery.ui.accordion.min.css | 5 + .../minified/jquery.ui.autocomplete.min.css | 5 + .../base/minified/jquery.ui.button.min.css | 5 + .../base/minified/jquery.ui.core.min.css | 5 + .../minified/jquery.ui.datepicker.min.css | 5 + .../base/minified/jquery.ui.dialog.min.css | 5 + .../minified/jquery.ui.progressbar.min.css | 5 + .../base/minified/jquery.ui.resizable.min.css | 5 + .../minified/jquery.ui.selectable.min.css | 5 + .../base/minified/jquery.ui.slider.min.css | 5 + .../base/minified/jquery.ui.tabs.min.css | 5 + .../base/minified/jquery.ui.theme.min.css | 5 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_ede3b1_1x400.png | Bin 0 -> 164 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_eca58e_1x400.png | Bin 0 -> 133 bytes .../ui-bg_highlight-soft_75_d0d9c2_1x100.png | Bin 0 -> 121 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../custom-theme/jquery-ui-1.8.13.custom.css | 526 + Web/Controllers/CityController.cs | 16 + Web/Controllers/ControllerBase.cs | 21 + Web/Controllers/CreateLogController.cs | 108 + Web/Controllers/EmployeeController.cs | 16 + Web/Controllers/HomeController.cs | 12 + Web/Controllers/LogController.cs | 207 + Web/Controllers/VehicleController.cs | 84 + Web/DAL/ChronologicalOrderException.cs | 11 + Web/DAL/DataService.cs | 430 + Web/DAL/MileageTrakerInitializer.cs | 97 + Web/DAL/VehicleImporter.cs | 116 + Web/Global.asax | 1 + Web/Global.asax.cs | 76 + Web/Logs/MileageTraker.log | 35 + Web/Logs/MileageTraker.log.1 | 35 + Web/Logs/MileageTraker.log.2011-09-03 | 5 + Web/Logs/MileageTraker.log.2011-09-12 | 60 + Web/Logs/MileageTraker.log.2011-09-12.1 | 1 + Web/Logs/MileageTraker.log.2012-04-18 | 22 + Web/Logs/MileageTraker.log.2012-04-18.1 | 3 + Web/Logs/MileageTraker.log.2012-04-18.2 | 28 + Web/Logs/MileageTraker.log.2012-04-18.3 | 56 + Web/Logs/MileageTraker.log.2012-04-23 | 56 + Web/Logs/MileageTraker.log.2012-05-26 | 1 + Web/Logs/MileageTraker.log.2012-06-12 | 31 + Web/Logs/MileageTraker.log.2012-06-12.1 | 2 + Web/Logs/MileageTraker.log.2012-11-27 | 52 + Web/Logs/MileageTraker.log.2012-11-27.1 | 51 + ...1204181847082_InitialMigration.Designer.cs | 24 + .../201204181847082_InitialMigration.cs | 17 + Web/Migrations/Configuration.cs | 31 + Web/MileageTraker.log | 12 + Web/Models/City.cs | 12 + Web/Models/Log.cs | 100 + Web/Models/MileageLogType.cs | 37 + Web/Models/MileageTrakerContext.cs | 17 + Web/Models/Vehicle.cs | 69 + Web/Properties/AssemblyInfo.cs | 36 + Web/README.jQuery.vsdoc.txt | 1 + Web/Scripts/MicrosoftAjax.debug.js | 7117 ++++ Web/Scripts/MicrosoftAjax.js | 6 + Web/Scripts/MicrosoftMvcAjax.debug.js | 408 + Web/Scripts/MicrosoftMvcAjax.js | 25 + Web/Scripts/MicrosoftMvcValidation.debug.js | 883 + Web/Scripts/MicrosoftMvcValidation.js | 55 + Web/Scripts/Shared/Site.js | 152 + Web/Scripts/jquery-1.7.2-vsdoc.js | 7223 ++++ Web/Scripts/jquery-1.7.2.js | 9404 +++++ Web/Scripts/jquery-1.7.2.min.js | 4 + Web/Scripts/jquery-ui-1.8.13.custom.min.js | 410 + Web/Scripts/jquery-ui-1.8.19.js | 11459 ++++++ Web/Scripts/jquery-ui-1.8.19.min.js | 5 + Web/Scripts/jquery.numeric.js | 239 + Web/Scripts/jquery.qtip-1.0.0-rc3.min.js | 15 + Web/Scripts/jquery.unobtrusive-ajax.js | 165 + Web/Scripts/jquery.unobtrusive-ajax.min.js | 5 + Web/Scripts/jquery.validate-vsdoc.js | 1291 + Web/Scripts/jquery.validate.js | 1188 + Web/Scripts/jquery.validate.min.js | 51 + Web/Scripts/jquery.validate.unobtrusive.js | 319 + .../jquery.validate.unobtrusive.min.js | 5 + Web/Scripts/modernizr-2.5.3.js | 1265 + Web/Utility/ActionLogAttribute.cs | 24 + Web/Utility/Algorithms.cs | 87 + Web/Utility/CustomExtensions.cs | 185 + Web/Utility/DateTimeTypeConverter.cs | 13 + Web/Utility/DenyFutureDateAttribute.cs | 14 + Web/Utility/DenyPreviousMonthDateAttribute.cs | 23 + Web/Utility/ExcelWriter.cs | 99 + Web/Utility/FormatHintAttribute.cs | 48 + Web/Utility/HttpParamActionAttribute.cs | 21 + Web/Utility/RequireRequestValueAttribute.cs | 18 + Web/Utility/TitleCaseFormatter.cs | 13 + Web/ViewModels/ConfirmCreateLogViewModel.cs | 60 + Web/ViewModels/CreateLogViewModel.cs | 108 + Web/ViewModels/EmployeeMileageItem.cs | 16 + Web/ViewModels/EmployeeMileageViewModel.cs | 20 + Web/ViewModels/LogIndexViewModel.cs | 45 + Web/ViewModels/LogPartialDetails.cs | 47 + Web/ViewModels/LogQueryViewModel.cs | 11 + Web/ViewModels/LogResultsViewModel.cs | 14 + Web/ViewModels/VehicleMileageItem.cs | 17 + Web/ViewModels/VehicleMileageViewModel.cs | 20 + Web/ViewModels/VehiclePartialDetails.cs | 47 + Web/Views/CreateLog/Confirm.cshtml | 92 + Web/Views/CreateLog/Index.cshtml | 29 + Web/Views/CreateLog/RecentLogs.cshtml | 47 + Web/Views/CreateLog/Success.cshtml | 29 + Web/Views/Home/About.cshtml | 8 + Web/Views/Log/Create.cshtml | 25 + Web/Views/Log/Delete.cshtml | 19 + Web/Views/Log/Details.cshtml | 23 + Web/Views/Log/DetailsPartial.cshtml | 10 + Web/Views/Log/Edit.cshtml | 27 + Web/Views/Log/Empty.cshtml | 8 + Web/Views/Log/Index.cshtml | 56 + Web/Views/Log/LogsSummary.cshtml | 48 + Web/Views/Log/MonthlyEmployeeMileage.cshtml | 54 + Web/Views/Log/MonthlyVehicleMileage.cshtml | 55 + .../Shared/DisplayTemplates/DateTime.cshtml | 5 + .../Shared/DisplayTemplates/Decimal.cshtml | 4 + .../DisplayTemplates/HiddenInput.cshtml | 4 + .../MileageLogTypeWrapper.cshtml | 7 + .../Shared/DisplayTemplates/Object.cshtml | 8 + .../Shared/DisplayTemplates/String.cshtml | 4 + .../DisplayTemplates/_FieldLayout.cshtml | 20 + .../Shared/EditorTemplates/DateTime.cshtml | 5 + .../Shared/EditorTemplates/Decimal.cshtml | 4 + Web/Views/Shared/EditorTemplates/Enum.cshtml | 18 + .../Shared/EditorTemplates/Enum_Select.cshtml | 7 + .../Shared/EditorTemplates/HiddenInput.cshtml | 1 + .../LogResultsViewModel.cshtml | 7 + .../MileageLogTypeWrapper.cshtml | 6 + .../Shared/EditorTemplates/Object.cshtml | 8 + .../Shared/EditorTemplates/String.cshtml | 11 + .../EditorTemplates/_FieldLayout.cshtml | 26 + Web/Views/Shared/Error.cshtml | 13 + Web/Views/Shared/_Layout.cshtml | 36 + Web/Views/Shared/_Layout.min.cshtml | 38 + Web/Views/Vehicle/Create.cshtml | 26 + Web/Views/Vehicle/Details.cshtml | 20 + Web/Views/Vehicle/DetailsPartial.cshtml | 8 + Web/Views/Vehicle/Edit.cshtml | 26 + Web/Views/Vehicle/Index.cshtml | 94 + Web/Views/Web.config | 58 + Web/Views/_ViewStart.cshtml | 3 + Web/Web.Debug.config | 30 + Web/Web.Publish.xml | 169 + Web/Web.Release.config | 31 + Web/Web.config | 72 + Web/Web.csproj | 397 + Web/favicon.ico | Bin 0 -> 3605 bytes Web/packages.config | 13 + .../AutoMapper.2.1.267.nupkg | Bin 0 -> 174584 bytes .../lib/net40/AutoMapper.dll | Bin 0 -> 139264 bytes .../lib/net40/AutoMapper.xml | 15 + .../AutoMapper.2.1.267/lib/sl4/AutoMapper.XML | 671 + .../AutoMapper.2.1.267/lib/sl4/AutoMapper.dll | Bin 0 -> 164352 bytes .../Content/App.config.transform | 5 + .../Content/Web.config.transform | 5 + .../EntityFramework.4.3.1.nupkg | Bin 0 -> 693778 bytes .../lib/net40/EntityFramework.dll | Bin 0 -> 1060640 bytes .../lib/net40/EntityFramework.xml | 17551 +++++++++ .../tools/EF4.3on.NET4.5Readme.txt | 52 + .../tools/EntityFramework.PowerShell.dll | Bin 0 -> 53536 bytes .../tools/EntityFramework.psd1 | Bin 0 -> 5224 bytes .../tools/EntityFramework.psm1 | 493 + packages/EntityFramework.4.3.1/tools/init.ps1 | 13 + .../EntityFramework.4.3.1/tools/install.ps1 | 36 + .../EntityFramework.4.3.1/tools/migrate.exe | Bin 0 -> 44320 bytes .../ExcelLibrary.1.2011.7.30.nupkg | Bin 0 -> 70352 bytes .../lib/ExcelLibrary.dll | Bin 0 -> 118784 bytes .../Content/Scripts/modernizr-2.5.3.js | 1265 + .../Modernizr.2.5.3/Modernizr.2.5.3.nupkg | Bin 0 -> 18322 bytes .../NUnit.2.6.0.12054/NUnit.2.6.0.12054.nupkg | Bin 0 -> 93979 bytes .../NUnit.2.6.0.12054/lib/nunit.framework.dll | Bin 0 -> 143360 bytes .../NUnit.2.6.0.12054/lib/nunit.framework.xml | 10845 ++++++ packages/NUnit.2.6.0.12054/license.txt | 15 + .../Content/Scripts/jquery-1.7.2-vsdoc.js | 7223 ++++ .../Content/Scripts/jquery-1.7.2.js | 9404 +++++ .../Content/Scripts/jquery-1.7.2.min.js | 4 + packages/jQuery.1.7.2/Tools/install.ps1 | 46 + .../Tools/jquery-1.7.2.intellisense.js | 2494 ++ packages/jQuery.1.7.2/Tools/uninstall.ps1 | 64 + packages/jQuery.1.7.2/jQuery.1.7.2.nupkg | Bin 0 -> 180771 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../base/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../Content/Content/themes/base/jquery-ui.css | 466 + .../themes/base/jquery.ui.accordion.css | 19 + .../Content/themes/base/jquery.ui.all.css | 11 + .../themes/base/jquery.ui.autocomplete.css | 53 + .../Content/themes/base/jquery.ui.base.css | 21 + .../Content/themes/base/jquery.ui.button.css | 38 + .../Content/themes/base/jquery.ui.core.css | 38 + .../themes/base/jquery.ui.datepicker.css | 68 + .../Content/themes/base/jquery.ui.dialog.css | 21 + .../themes/base/jquery.ui.progressbar.css | 11 + .../themes/base/jquery.ui.resizable.css | 20 + .../themes/base/jquery.ui.selectable.css | 10 + .../Content/themes/base/jquery.ui.slider.css | 24 + .../Content/themes/base/jquery.ui.tabs.css | 18 + .../Content/themes/base/jquery.ui.theme.css | 247 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../themes/base/minified/jquery-ui.min.css | 5 + .../base/minified/jquery.ui.accordion.min.css | 5 + .../minified/jquery.ui.autocomplete.min.css | 5 + .../base/minified/jquery.ui.button.min.css | 5 + .../base/minified/jquery.ui.core.min.css | 5 + .../minified/jquery.ui.datepicker.min.css | 5 + .../base/minified/jquery.ui.dialog.min.css | 5 + .../minified/jquery.ui.progressbar.min.css | 5 + .../base/minified/jquery.ui.resizable.min.css | 5 + .../minified/jquery.ui.selectable.min.css | 5 + .../base/minified/jquery.ui.slider.min.css | 5 + .../base/minified/jquery.ui.tabs.min.css | 5 + .../base/minified/jquery.ui.theme.min.css | 5 + .../Content/Scripts/jquery-ui-1.8.19.js | 11459 ++++++ .../Content/Scripts/jquery-ui-1.8.19.min.js | 5 + .../jQuery.UI.Combined.1.8.19.nupkg | Bin 0 -> 227946 bytes .../Content/Scripts/jquery.validate-vsdoc.js | 1291 + .../Content/Scripts/jquery.validate.js | 1188 + .../Content/Scripts/jquery.validate.min.js | 51 + .../jQuery.Validation.1.9.nupkg | Bin 0 -> 32059 bytes .../Content/README.jQuery.vsdoc.txt | 1 + .../jQuery.vsdoc.1.6/jQuery.vsdoc.1.6.nupkg | Bin 0 -> 3004 bytes .../log4net.2.0.0/lib/net10-full/log4net.dll | Bin 0 -> 294912 bytes .../log4net.2.0.0/lib/net10-full/log4net.xml | 30151 +++++++++++++++ .../log4net.2.0.0/lib/net11-full/log4net.dll | Bin 0 -> 294912 bytes .../log4net.2.0.0/lib/net11-full/log4net.xml | 30174 +++++++++++++++ .../log4net.2.0.0/lib/net20-cf/log4net.dll | Bin 0 -> 245760 bytes .../log4net.2.0.0/lib/net20-cf/log4net.xml | 26056 +++++++++++++ .../log4net.2.0.0/lib/net20-full/log4net.dll | Bin 0 -> 299008 bytes .../log4net.2.0.0/lib/net20-full/log4net.xml | 30205 ++++++++++++++++ .../lib/net35-client/log4net.dll | Bin 0 -> 294912 bytes .../lib/net35-client/log4net.xml | 30000 +++++++++++++++ .../log4net.2.0.0/lib/net35-full/log4net.dll | Bin 0 -> 299008 bytes .../log4net.2.0.0/lib/net35-full/log4net.xml | 30205 ++++++++++++++++ .../lib/net40-client/log4net.dll | Bin 0 -> 287232 bytes .../lib/net40-client/log4net.xml | 30000 +++++++++++++++ .../log4net.2.0.0/lib/net40-full/log4net.dll | Bin 0 -> 288768 bytes .../log4net.2.0.0/lib/net40-full/log4net.xml | 30205 ++++++++++++++++ packages/log4net.2.0.0/log4net.2.0.0.nupkg | Bin 0 -> 2717357 bytes packages/morelinq.1.0/lib/net35/MoreLinq.dll | Bin 0 -> 26624 bytes packages/morelinq.1.0/morelinq.1.0.nupkg | Bin 0 -> 17885 bytes packages/repositories.config | 5 + 346 files changed, 351799 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 ETHRAVehicles2011-07-30.xls create mode 100644 MileageTraker.sln create mode 100644 MileageTraker.vsmdi create mode 100644 Notes/2011ETHRAvehicles.xls create mode 100644 Notes/Header.psd create mode 100644 Notes/myImage (3).png create mode 100644 Web.Tests/CreateLogControllerTest.cs create mode 100644 Web.Tests/DAL/VehicleImporterTests.cs create mode 100644 Web.Tests/DAL/Vehicles.xls create mode 100644 Web.Tests/Properties/AssemblyInfo.cs create mode 100644 Web.Tests/Utility/AlgorithmsTests.cs create mode 100644 Web.Tests/Utility/CustomExtensionsTests.cs create mode 100644 Web.Tests/ViewModels/CreateLogViewModelTests.cs create mode 100644 Web.Tests/Web.Tests.csproj create mode 100644 Web.Tests/packages.config create mode 100644 Web/App_Data/2011ETHRAvehicles.xls create mode 100644 Web/App_Data/Cities.xls create mode 100644 Web/Content/Background.png create mode 100644 Web/Content/BlackBerry.css create mode 100644 Web/Content/CreateLog/BlackBerry.css create mode 100644 Web/Content/CreateLog/Index.css create mode 100644 Web/Content/Header.png create mode 100644 Web/Content/Header_white.png create mode 100644 Web/Content/Rainbow.png create mode 100644 Web/Content/Site.css create mode 100644 Web/Content/Site.min.css create mode 100644 Web/Content/VehicleColors.css create mode 100644 Web/Content/spinner.gif create mode 100644 Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 Web/Content/themes/base/images/ui-icons_222222_256x240.png create mode 100644 Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png create mode 100644 Web/Content/themes/base/images/ui-icons_454545_256x240.png create mode 100644 Web/Content/themes/base/images/ui-icons_888888_256x240.png create mode 100644 Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png create mode 100644 Web/Content/themes/base/jquery-ui.css create mode 100644 Web/Content/themes/base/jquery.ui.accordion.css create mode 100644 Web/Content/themes/base/jquery.ui.all.css create mode 100644 Web/Content/themes/base/jquery.ui.autocomplete.css create mode 100644 Web/Content/themes/base/jquery.ui.base.css create mode 100644 Web/Content/themes/base/jquery.ui.button.css create mode 100644 Web/Content/themes/base/jquery.ui.core.css create mode 100644 Web/Content/themes/base/jquery.ui.datepicker.css create mode 100644 Web/Content/themes/base/jquery.ui.dialog.css create mode 100644 Web/Content/themes/base/jquery.ui.progressbar.css create mode 100644 Web/Content/themes/base/jquery.ui.resizable.css create mode 100644 Web/Content/themes/base/jquery.ui.selectable.css create mode 100644 Web/Content/themes/base/jquery.ui.slider.css create mode 100644 Web/Content/themes/base/jquery.ui.tabs.css create mode 100644 Web/Content/themes/base/jquery.ui.theme.css create mode 100644 Web/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 Web/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 Web/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 Web/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 Web/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 Web/Content/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 Web/Content/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 Web/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 Web/Content/themes/base/minified/images/ui-icons_222222_256x240.png create mode 100644 Web/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png create mode 100644 Web/Content/themes/base/minified/images/ui-icons_454545_256x240.png create mode 100644 Web/Content/themes/base/minified/images/ui-icons_888888_256x240.png create mode 100644 Web/Content/themes/base/minified/images/ui-icons_cd0a0a_256x240.png create mode 100644 Web/Content/themes/base/minified/jquery-ui.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.accordion.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.autocomplete.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.button.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.core.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.datepicker.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.dialog.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.progressbar.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.resizable.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.selectable.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.slider.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.tabs.min.css create mode 100644 Web/Content/themes/base/minified/jquery.ui.theme.min.css create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_glass_55_ede3b1_1x400.png create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_glass_95_eca58e_1x400.png create mode 100644 Web/Content/themes/custom-theme/images/ui-bg_highlight-soft_75_d0d9c2_1x100.png create mode 100644 Web/Content/themes/custom-theme/images/ui-icons_222222_256x240.png create mode 100644 Web/Content/themes/custom-theme/images/ui-icons_2e83ff_256x240.png create mode 100644 Web/Content/themes/custom-theme/images/ui-icons_454545_256x240.png create mode 100644 Web/Content/themes/custom-theme/images/ui-icons_888888_256x240.png create mode 100644 Web/Content/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png create mode 100644 Web/Content/themes/custom-theme/jquery-ui-1.8.13.custom.css create mode 100644 Web/Controllers/CityController.cs create mode 100644 Web/Controllers/ControllerBase.cs create mode 100644 Web/Controllers/CreateLogController.cs create mode 100644 Web/Controllers/EmployeeController.cs create mode 100644 Web/Controllers/HomeController.cs create mode 100644 Web/Controllers/LogController.cs create mode 100644 Web/Controllers/VehicleController.cs create mode 100644 Web/DAL/ChronologicalOrderException.cs create mode 100644 Web/DAL/DataService.cs create mode 100644 Web/DAL/MileageTrakerInitializer.cs create mode 100644 Web/DAL/VehicleImporter.cs create mode 100644 Web/Global.asax create mode 100644 Web/Global.asax.cs create mode 100644 Web/Logs/MileageTraker.log create mode 100644 Web/Logs/MileageTraker.log.1 create mode 100644 Web/Logs/MileageTraker.log.2011-09-03 create mode 100644 Web/Logs/MileageTraker.log.2011-09-12 create mode 100644 Web/Logs/MileageTraker.log.2011-09-12.1 create mode 100644 Web/Logs/MileageTraker.log.2012-04-18 create mode 100644 Web/Logs/MileageTraker.log.2012-04-18.1 create mode 100644 Web/Logs/MileageTraker.log.2012-04-18.2 create mode 100644 Web/Logs/MileageTraker.log.2012-04-18.3 create mode 100644 Web/Logs/MileageTraker.log.2012-04-23 create mode 100644 Web/Logs/MileageTraker.log.2012-05-26 create mode 100644 Web/Logs/MileageTraker.log.2012-06-12 create mode 100644 Web/Logs/MileageTraker.log.2012-06-12.1 create mode 100644 Web/Logs/MileageTraker.log.2012-11-27 create mode 100644 Web/Logs/MileageTraker.log.2012-11-27.1 create mode 100644 Web/Migrations/201204181847082_InitialMigration.Designer.cs create mode 100644 Web/Migrations/201204181847082_InitialMigration.cs create mode 100644 Web/Migrations/Configuration.cs create mode 100644 Web/MileageTraker.log create mode 100644 Web/Models/City.cs create mode 100644 Web/Models/Log.cs create mode 100644 Web/Models/MileageLogType.cs create mode 100644 Web/Models/MileageTrakerContext.cs create mode 100644 Web/Models/Vehicle.cs create mode 100644 Web/Properties/AssemblyInfo.cs create mode 100644 Web/README.jQuery.vsdoc.txt create mode 100644 Web/Scripts/MicrosoftAjax.debug.js create mode 100644 Web/Scripts/MicrosoftAjax.js create mode 100644 Web/Scripts/MicrosoftMvcAjax.debug.js create mode 100644 Web/Scripts/MicrosoftMvcAjax.js create mode 100644 Web/Scripts/MicrosoftMvcValidation.debug.js create mode 100644 Web/Scripts/MicrosoftMvcValidation.js create mode 100644 Web/Scripts/Shared/Site.js create mode 100644 Web/Scripts/jquery-1.7.2-vsdoc.js create mode 100644 Web/Scripts/jquery-1.7.2.js create mode 100644 Web/Scripts/jquery-1.7.2.min.js create mode 100644 Web/Scripts/jquery-ui-1.8.13.custom.min.js create mode 100644 Web/Scripts/jquery-ui-1.8.19.js create mode 100644 Web/Scripts/jquery-ui-1.8.19.min.js create mode 100644 Web/Scripts/jquery.numeric.js create mode 100644 Web/Scripts/jquery.qtip-1.0.0-rc3.min.js create mode 100644 Web/Scripts/jquery.unobtrusive-ajax.js create mode 100644 Web/Scripts/jquery.unobtrusive-ajax.min.js create mode 100644 Web/Scripts/jquery.validate-vsdoc.js create mode 100644 Web/Scripts/jquery.validate.js create mode 100644 Web/Scripts/jquery.validate.min.js create mode 100644 Web/Scripts/jquery.validate.unobtrusive.js create mode 100644 Web/Scripts/jquery.validate.unobtrusive.min.js create mode 100644 Web/Scripts/modernizr-2.5.3.js create mode 100644 Web/Utility/ActionLogAttribute.cs create mode 100644 Web/Utility/Algorithms.cs create mode 100644 Web/Utility/CustomExtensions.cs create mode 100644 Web/Utility/DateTimeTypeConverter.cs create mode 100644 Web/Utility/DenyFutureDateAttribute.cs create mode 100644 Web/Utility/DenyPreviousMonthDateAttribute.cs create mode 100644 Web/Utility/ExcelWriter.cs create mode 100644 Web/Utility/FormatHintAttribute.cs create mode 100644 Web/Utility/HttpParamActionAttribute.cs create mode 100644 Web/Utility/RequireRequestValueAttribute.cs create mode 100644 Web/Utility/TitleCaseFormatter.cs create mode 100644 Web/ViewModels/ConfirmCreateLogViewModel.cs create mode 100644 Web/ViewModels/CreateLogViewModel.cs create mode 100644 Web/ViewModels/EmployeeMileageItem.cs create mode 100644 Web/ViewModels/EmployeeMileageViewModel.cs create mode 100644 Web/ViewModels/LogIndexViewModel.cs create mode 100644 Web/ViewModels/LogPartialDetails.cs create mode 100644 Web/ViewModels/LogQueryViewModel.cs create mode 100644 Web/ViewModels/LogResultsViewModel.cs create mode 100644 Web/ViewModels/VehicleMileageItem.cs create mode 100644 Web/ViewModels/VehicleMileageViewModel.cs create mode 100644 Web/ViewModels/VehiclePartialDetails.cs create mode 100644 Web/Views/CreateLog/Confirm.cshtml create mode 100644 Web/Views/CreateLog/Index.cshtml create mode 100644 Web/Views/CreateLog/RecentLogs.cshtml create mode 100644 Web/Views/CreateLog/Success.cshtml create mode 100644 Web/Views/Home/About.cshtml create mode 100644 Web/Views/Log/Create.cshtml create mode 100644 Web/Views/Log/Delete.cshtml create mode 100644 Web/Views/Log/Details.cshtml create mode 100644 Web/Views/Log/DetailsPartial.cshtml create mode 100644 Web/Views/Log/Edit.cshtml create mode 100644 Web/Views/Log/Empty.cshtml create mode 100644 Web/Views/Log/Index.cshtml create mode 100644 Web/Views/Log/LogsSummary.cshtml create mode 100644 Web/Views/Log/MonthlyEmployeeMileage.cshtml create mode 100644 Web/Views/Log/MonthlyVehicleMileage.cshtml create mode 100644 Web/Views/Shared/DisplayTemplates/DateTime.cshtml create mode 100644 Web/Views/Shared/DisplayTemplates/Decimal.cshtml create mode 100644 Web/Views/Shared/DisplayTemplates/HiddenInput.cshtml create mode 100644 Web/Views/Shared/DisplayTemplates/MileageLogTypeWrapper.cshtml create mode 100644 Web/Views/Shared/DisplayTemplates/Object.cshtml create mode 100644 Web/Views/Shared/DisplayTemplates/String.cshtml create mode 100644 Web/Views/Shared/DisplayTemplates/_FieldLayout.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/DateTime.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/Decimal.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/Enum.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/Enum_Select.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/HiddenInput.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/LogResultsViewModel.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/MileageLogTypeWrapper.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/Object.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/String.cshtml create mode 100644 Web/Views/Shared/EditorTemplates/_FieldLayout.cshtml create mode 100644 Web/Views/Shared/Error.cshtml create mode 100644 Web/Views/Shared/_Layout.cshtml create mode 100644 Web/Views/Shared/_Layout.min.cshtml create mode 100644 Web/Views/Vehicle/Create.cshtml create mode 100644 Web/Views/Vehicle/Details.cshtml create mode 100644 Web/Views/Vehicle/DetailsPartial.cshtml create mode 100644 Web/Views/Vehicle/Edit.cshtml create mode 100644 Web/Views/Vehicle/Index.cshtml create mode 100644 Web/Views/Web.config create mode 100644 Web/Views/_ViewStart.cshtml create mode 100644 Web/Web.Debug.config create mode 100644 Web/Web.Publish.xml create mode 100644 Web/Web.Release.config create mode 100644 Web/Web.config create mode 100644 Web/Web.csproj create mode 100644 Web/favicon.ico create mode 100644 Web/packages.config create mode 100644 packages/AutoMapper.2.1.267/AutoMapper.2.1.267.nupkg create mode 100644 packages/AutoMapper.2.1.267/lib/net40/AutoMapper.dll create mode 100644 packages/AutoMapper.2.1.267/lib/net40/AutoMapper.xml create mode 100644 packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.XML create mode 100644 packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.dll create mode 100644 packages/EntityFramework.4.3.1/Content/App.config.transform create mode 100644 packages/EntityFramework.4.3.1/Content/Web.config.transform create mode 100644 packages/EntityFramework.4.3.1/EntityFramework.4.3.1.nupkg create mode 100644 packages/EntityFramework.4.3.1/lib/net40/EntityFramework.dll create mode 100644 packages/EntityFramework.4.3.1/lib/net40/EntityFramework.xml create mode 100644 packages/EntityFramework.4.3.1/tools/EF4.3on.NET4.5Readme.txt create mode 100644 packages/EntityFramework.4.3.1/tools/EntityFramework.PowerShell.dll create mode 100644 packages/EntityFramework.4.3.1/tools/EntityFramework.psd1 create mode 100644 packages/EntityFramework.4.3.1/tools/EntityFramework.psm1 create mode 100644 packages/EntityFramework.4.3.1/tools/init.ps1 create mode 100644 packages/EntityFramework.4.3.1/tools/install.ps1 create mode 100644 packages/EntityFramework.4.3.1/tools/migrate.exe create mode 100644 packages/ExcelLibrary.1.2011.7.30/ExcelLibrary.1.2011.7.30.nupkg create mode 100644 packages/ExcelLibrary.1.2011.7.30/lib/ExcelLibrary.dll create mode 100644 packages/Modernizr.2.5.3/Content/Scripts/modernizr-2.5.3.js create mode 100644 packages/Modernizr.2.5.3/Modernizr.2.5.3.nupkg create mode 100644 packages/NUnit.2.6.0.12054/NUnit.2.6.0.12054.nupkg create mode 100644 packages/NUnit.2.6.0.12054/lib/nunit.framework.dll create mode 100644 packages/NUnit.2.6.0.12054/lib/nunit.framework.xml create mode 100644 packages/NUnit.2.6.0.12054/license.txt create mode 100644 packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2-vsdoc.js create mode 100644 packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2.js create mode 100644 packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2.min.js create mode 100644 packages/jQuery.1.7.2/Tools/install.ps1 create mode 100644 packages/jQuery.1.7.2/Tools/jquery-1.7.2.intellisense.js create mode 100644 packages/jQuery.1.7.2/Tools/uninstall.ps1 create mode 100644 packages/jQuery.1.7.2/jQuery.1.7.2.nupkg create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-icons_222222_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-icons_2e83ff_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-icons_454545_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-icons_888888_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/images/ui-icons_cd0a0a_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery-ui.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.accordion.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.all.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.autocomplete.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.base.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.button.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.core.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.datepicker.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.dialog.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.progressbar.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.resizable.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.selectable.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.slider.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.tabs.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/jquery.ui.theme.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-icons_222222_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-icons_454545_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-icons_888888_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/images/ui-icons_cd0a0a_256x240.png create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery-ui.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.accordion.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.autocomplete.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.button.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.core.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.datepicker.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.dialog.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.progressbar.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.resizable.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.selectable.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.slider.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.tabs.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Content/themes/base/minified/jquery.ui.theme.min.css create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Scripts/jquery-ui-1.8.19.js create mode 100644 packages/jQuery.UI.Combined.1.8.19/Content/Scripts/jquery-ui-1.8.19.min.js create mode 100644 packages/jQuery.UI.Combined.1.8.19/jQuery.UI.Combined.1.8.19.nupkg create mode 100644 packages/jQuery.Validation.1.9/Content/Scripts/jquery.validate-vsdoc.js create mode 100644 packages/jQuery.Validation.1.9/Content/Scripts/jquery.validate.js create mode 100644 packages/jQuery.Validation.1.9/Content/Scripts/jquery.validate.min.js create mode 100644 packages/jQuery.Validation.1.9/jQuery.Validation.1.9.nupkg create mode 100644 packages/jQuery.vsdoc.1.6/Content/README.jQuery.vsdoc.txt create mode 100644 packages/jQuery.vsdoc.1.6/jQuery.vsdoc.1.6.nupkg create mode 100644 packages/log4net.2.0.0/lib/net10-full/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net10-full/log4net.xml create mode 100644 packages/log4net.2.0.0/lib/net11-full/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net11-full/log4net.xml create mode 100644 packages/log4net.2.0.0/lib/net20-cf/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net20-cf/log4net.xml create mode 100644 packages/log4net.2.0.0/lib/net20-full/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net20-full/log4net.xml create mode 100644 packages/log4net.2.0.0/lib/net35-client/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net35-client/log4net.xml create mode 100644 packages/log4net.2.0.0/lib/net35-full/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net35-full/log4net.xml create mode 100644 packages/log4net.2.0.0/lib/net40-client/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net40-client/log4net.xml create mode 100644 packages/log4net.2.0.0/lib/net40-full/log4net.dll create mode 100644 packages/log4net.2.0.0/lib/net40-full/log4net.xml create mode 100644 packages/log4net.2.0.0/log4net.2.0.0.nupkg create mode 100644 packages/morelinq.1.0/lib/net35/MoreLinq.dll create mode 100644 packages/morelinq.1.0/morelinq.1.0.nupkg create mode 100644 packages/repositories.config diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ebd21a --- /dev/null +++ b/.gitignore @@ -0,0 +1,163 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store diff --git a/ETHRAVehicles2011-07-30.xls b/ETHRAVehicles2011-07-30.xls new file mode 100644 index 0000000000000000000000000000000000000000..12571ccc757085730a3e1494ddfd03b839773677 GIT binary patch literal 26624 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 + + + + + \ No newline at end of file diff --git a/Notes/2011ETHRAvehicles.xls b/Notes/2011ETHRAvehicles.xls new file mode 100644 index 0000000000000000000000000000000000000000..21e4653941ab34010f8436c0383085813f85750d GIT binary patch literal 41472 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

9XIJbR0o=GG*@N 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 z

    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�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 + ///This is a test class for CreateLogControllerTest and is intended + ///to contain all CreateLogControllerTest Unit Tests + /// + [TestFixture] + public class CreateLogControllerTest + { + [Test] + public void IndexTest() + { + var target = new CreateLogController(); + CreateLogViewModel model = null; + ActionResult expected = null; + ActionResult actual; + + actual = target.Index(model); + + Assert.AreEqual(expected, actual); + Assert.Inconclusive("Verify the correctness of this test method."); + } + } +} diff --git a/Web.Tests/DAL/VehicleImporterTests.cs b/Web.Tests/DAL/VehicleImporterTests.cs new file mode 100644 index 0000000..92b0b3d --- /dev/null +++ b/Web.Tests/DAL/VehicleImporterTests.cs @@ -0,0 +1,31 @@ +using System; +using System.IO; +using System.Linq; +using ExcelLibrary.SpreadSheet; +using MileageTraker.Web.DAL; +using NUnit.Framework; + +namespace Web.Tests.DAL +{ + [TestFixture] + public class VehicleImporterTests + { + [Test] + public void Import_Gets_More_Than_One_Result() + { + var vehicles = VehicleImporter.Import("DAL\\Vehicles.xls"); + + Assert.That(vehicles.Count(), Is.GreaterThan(0)); + } + + [Test] + public void Export_Saves_A_File() + { + var vehicles = VehicleImporter.Import("DAL\\Vehicles.xls"); + const string filename = @"VehiclesExport.xls"; + VehicleImporter.Export(vehicles, filename); + Assert.That(File.Exists(filename)); + File.Delete(filename); + } + } +} diff --git a/Web.Tests/DAL/Vehicles.xls b/Web.Tests/DAL/Vehicles.xls new file mode 100644 index 0000000000000000000000000000000000000000..509528da893a6f468b837f417588d6263ccf860b GIT binary patch literal 41472 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 JrBY1({~NAEqM85z literal 0 HcmV?d00001 diff --git a/Web.Tests/Properties/AssemblyInfo.cs b/Web.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..47107de --- /dev/null +++ b/Web.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Web.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Web.Tests")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("76250afd-71db-419d-9cac-e10201c622f0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Web.Tests/Utility/AlgorithmsTests.cs b/Web.Tests/Utility/AlgorithmsTests.cs new file mode 100644 index 0000000..b8a4b43 --- /dev/null +++ b/Web.Tests/Utility/AlgorithmsTests.cs @@ -0,0 +1,74 @@ +using System; +using MileageTraker.Web.Utility; +using NUnit.Framework; + +namespace Web.Tests.Utility +{ + [TestFixture] + public class AlgorithmsTests + { + private const int _existingNumber = 2; + private readonly DateTime _existingDate = DateTime.Today.AddDays(-1); + + [Test] + public void IsChronological_True_If_Greater_And_After() + { + var date = _existingDate.AddDays(1); + const int number = _existingNumber + 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result); + } + + [Test] + public void IsChronological_False_If_LessThan_And_After() + { + var date = _existingDate.AddDays(1); + const int number = _existingNumber - 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.False); + } + + [Test] + public void IsChronological_True_If_LessThan_And_Before() + { + var date = _existingDate.AddDays(-1); + const int number = _existingNumber - 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.True); + } + + [Test] + public void IsChronological_False_If_GreaterThan_And_Before() + { + var date = _existingDate.AddDays(-1); + const int number = _existingNumber + 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.False); + } + + [Test] + public void IsChronological_True_If_Same_And_Before() + { + var date = _existingDate.AddDays(-1); + const int number = _existingNumber; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.True); + } + + + [Test] + public void IsChronological_True_If_Greater_And_SameTime() + { + var date = _existingDate; + const int number = _existingNumber + 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.True); + } + } +} \ No newline at end of file diff --git a/Web.Tests/Utility/CustomExtensionsTests.cs b/Web.Tests/Utility/CustomExtensionsTests.cs new file mode 100644 index 0000000..180cdc5 --- /dev/null +++ b/Web.Tests/Utility/CustomExtensionsTests.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using MileageTraker.Web.Utility; +using NUnit.Framework; + +namespace Web.Tests.Utility +{ + [TestFixture] + public class CustomExtensionsTests + { + [Test] + public void TimeSpan_ToReadableString_Yesterday() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-1)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("Yesterday")); + } + + [Test] + public void TimeSpan_ToReadableString_Today() + { + var s = (DateTime.Today - DateTime.Today).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("Today")); + } + + [Test] + public void TimeSpan_ToReadableString_TwoDaysAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-2)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("2 days ago")); + } + + [Test] + public void TimeSpan_ToReadableString_OneWeekAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-7)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week ago")); + } + + [Test] + public void TimeSpan_ToReadableString_OneWeekOneDayAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-8)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week, 1 day ago")); + } + + [Test] + public void TimeSpan_ToReadableString_OneWeekTwoDaysAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-9)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week, 2 days ago")); + } + + [Test] + public void TimeSpan_ToReadableString_TwoWeeksAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-7)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week ago")); + } + } +} diff --git a/Web.Tests/ViewModels/CreateLogViewModelTests.cs b/Web.Tests/ViewModels/CreateLogViewModelTests.cs new file mode 100644 index 0000000..fbff223 --- /dev/null +++ b/Web.Tests/ViewModels/CreateLogViewModelTests.cs @@ -0,0 +1,71 @@ +using System; +using MileageTraker.Web.Models; +using MileageTraker.Web.ViewModels; +using NUnit.Framework; + +namespace Web.Tests.ViewModels +{ + [TestFixture] + public class CreateLogViewModelTests + { + [Test] + public void GetLog_Converts_To_Log() + { + var cityName = "My Town"; + var date = DateTime.Today.ToString("d"); + var employeeName = "Name"; + var endOdometer = "1234"; + var ethraId = "4567"; + string gasPurchased = "2.546"; + var mileageLogType = new MileageLogTypeWrapper {Enum = MileageLogType.Commuting}; + + var viewModel = + new CreateLogViewModel + { + CityName = cityName, + Date = date, + EmployeeName = employeeName, + EndOdometer = endOdometer, + VehicleId = ethraId, + GasPurchased = gasPurchased, + LogType = mileageLogType + }; + + var log = viewModel.GetLog(); + } + + [Test] + public void Ctor_Initializes_From_Log() + { + var cityName = "My Town"; + var date = DateTime.Today; + var employeeName = "Name"; + var endOdometer = 1234; + var ethraId = "4567"; + var gasPurchased = 2.546d; + var mileageLogType = MileageLogType.Commuting; + + var log = + new Log + { + CityName = cityName, + Date = date, + EmployeeName = employeeName, + EndOdometer = endOdometer, + VehicleId = ethraId, + GasPurchased = gasPurchased, + LogType = mileageLogType + }; + + var viewModel = new CreateLogViewModel(log); + + Assert.That(viewModel.CityName, Is.EqualTo(cityName)); + Assert.That(viewModel.Date, Is.EqualTo(date.ToString("d"))); + Assert.That(viewModel.EmployeeName, Is.EqualTo(employeeName)); + Assert.That(viewModel.EndOdometer, Is.EqualTo(endOdometer.ToString())); + Assert.That(viewModel.VehicleId, Is.EqualTo(ethraId)); + Assert.That(viewModel.GasPurchased, Is.EqualTo(gasPurchased.ToString())); + Assert.That(viewModel.LogType.Enum, Is.EqualTo(mileageLogType)); + } + } +} diff --git a/Web.Tests/Web.Tests.csproj b/Web.Tests/Web.Tests.csproj new file mode 100644 index 0000000..f061538 --- /dev/null +++ b/Web.Tests/Web.Tests.csproj @@ -0,0 +1,89 @@ + + + + Debug + AnyCPU + + + 2.0 + {A2CF2B7A-A0A7-4A32-895C-A7B4DBC57722} + Library + Properties + Web.Tests + Web.Tests + v4.0 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\ExcelLibrary.1.2011.7.30\lib\ExcelLibrary.dll + + + ..\packages\NUnit.2.6.0.12054\lib\nunit.framework.dll + + + + + 3.5 + + + + + True + + + + + False + + + + + + + + + + + + + PreserveNewest + + + + + {36D4C321-E918-460F-B348-16A805F88884} + Web + + + + + + + + + \ No newline at end of file diff --git a/Web.Tests/packages.config b/Web.Tests/packages.config new file mode 100644 index 0000000..e57cab0 --- /dev/null +++ b/Web.Tests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Web/App_Data/2011ETHRAvehicles.xls b/Web/App_Data/2011ETHRAvehicles.xls new file mode 100644 index 0000000000000000000000000000000000000000..1760c22fff86e493014a3fb8fc7a47e1f380131b GIT binary patch literal 41472 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 IDJK8_4ZEA6{{R30 literal 0 HcmV?d00001 diff --git a/Web/App_Data/Cities.xls b/Web/App_Data/Cities.xls new file mode 100644 index 0000000000000000000000000000000000000000..8804485cf208cf08d276ec0e451663b1ec59297c GIT binary patch literal 34816 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 literal 0 HcmV?d00001 diff --git a/Web/Content/Background.png b/Web/Content/Background.png new file mode 100644 index 0000000000000000000000000000000000000000..8e27c5582bf5fda76beb18805dd525049e838461 GIT binary patch literal 3935 zcmaJ^S6EY9w?#c7MNt$%5itZrKBXfd5k$IlgeV{i1PC1hB#_Xh7m*@GK&tc>LP$af z3B5`$p@&`r(rn-j=RcnRK3wm9S#zyD#+YNyHTS~~)6r77z`)KxLql^x^@*Y`b*09q zqUp|1qYTSaoYdtyLdgK32eU*VAudoFISZH>6rkz=v4ZMCAr|h=9Z+c+nlk_!umQqA zQv+lUa}b1_U<6SPPE7r+;M~;s3OW+Atv$#7Rg*Q23;z-#|^x z{~zk$@GlyU(1rfj@Bb+b2fI5#g><2Cn5&C9_2MkKPf|I76kMPX1k42tgW3P?qK-8T z0fSq^oB#@X;sAXcM++Dd{x@1v6Qt@0M?f6Sp{j~9Kq_C*#>N69AucH|rX(W&KF>W4HFpHg+Rgx=U8J0_&Q+33YzeL_~49e+{v8ZRc%UZ)jt?Pvs|1Ty4?P zW;n6a9b1jWRHl>WQbwlW#kdU8Ty#fYY|oG@nvgxcm^HmvytIj4p}gxF%qOqL_6{cw zjN`WUKa5NjENm1lZKVuP<;t6~NH#~7Q?%1mG&Hdu#t(dNXsE)o5!;|m($1v-=ud5qzTL+mFe-Lc$8O{Q0wX(a4o?n4^8;h5Yxx!%GSTU9~e&@ zB*9B?C~TDnt~#otKVxFvy{sx@f}AzIges z@wtx^3x)IRnUf12hNiF^`+n7*$~X4>YZ{|E`~7N(ksW>5^;2#R03vcH$ zZ5*p%HfQ81%Vxt?cN`G6urd?a!yi9RS$!T)>DfyA8C!l>hn!iSnmKf0;%ux?2@-0f zL@?MX?^AXT^kuHKOqd)s9UCEzZu$DJzbE^CzvAdC(-5>idPv#6K%Dr6Y}k=x^z>M0 z;6J9ktjrBL6PcYBq*LU{TF6%D`OciY<|gjXIa09Ri!2=8%(tU}M_toO*UuB1ssqlg_nyP2F9&4w z2FMLH0-gxYXJs&RB@+1f_)t$TRr;ryAgua#qqbL`Zl|i?W*^ce@EEkJApKQzE(@Mz zJ8N=2cdDhTMoEcHyirMM*{Nb>tL3BmvLG#6=94UlFJ)5d!hJUJWOa5<_Lt;?J~}xu z{)-o_zXz)aJc=^%rqnHGR_${lyek~{-B%FappRP1ToHUjcjm56S%Id`CNSl>GJ~e# z8TAEIg14H32KBYP+>Z8KU&=B&zhZN~4J7}irP7z9+enoEJ~u&8Go#0k0J*1nQjvcvpE=xhdW~)~gjZiR3bNXdytcYObMe9=U3FG#_i(=K+ySuwLHhTgA?ZzNsYa!jI zn2K8*EDo@!#>S+81F=mhK$)V#*NkC}d-NrAW{+=Slck#duTZ!;ZRxs;Q;LI&Q-e)q z78VwG?CG?$Ul_@DUh*=ER@)=} z=e?eX4Aaxv^!+t9sjKQUZf*yD@V1HG zo4vjFfm}J!Ubw&VZ|~s>a}JN2yPmk4}~>J{b&-! zo3mn~y z(iP>6JI=%*&VOd^Y?FDZHL9Bu&(j)dLQeZo(`KG2S{W}Ldwj-wyjMg!68sTFw6eNzS{L0 z6C50LP$?+X$thn5&Iflwjh%z!n9=E&aR9jRdVZ2fx-a2}fYV&v2mU(iA=e0 z>oC^~xe!~xi$n@%{xrOV!A?%i%-p(nAvpeck*r+h>;A3NC7_|<)Z*eI?U@PF*K=74 z!@*JKgB57OHwufC-16Cn-Ni#ti;FkqHK)bgheOgj<^z(GYm=o5tAn2iu=375cS{R= z!v-rEXV(oVF;b8xT()CXzjj%-$?tV^;a&Qf=qQaC%jc>pbh%c~pFQj8@XE3UiO#fl zrx?de-6?0lNxjPrkmzpLU|BzRdf6-b!E%6(F7VM4jq{odfx$rVWo=+Uvw^W};Q6vJ z6$NL6ihc2HR@oS{=brUSWZ&4>O`R>B*1P8B@p?&j<1^KAL=W$A10#H-v?9@aY(RF;Th~N<2XBtKm;NGA^kzf5XY23hHwz z)Zu^MYjSCHbyW3yi%ZzZ>b^mq3A*o%&cz*XDZ>V)h&_)Z&`~LiSH_HHF0;~34JXG@ o2zk(PMRw?yha}{1%a=}=rq5n4vwCQwI{*Lx literal 0 HcmV?d00001 diff --git a/Web/Content/BlackBerry.css b/Web/Content/BlackBerry.css new file mode 100644 index 0000000..41097c0 --- /dev/null +++ b/Web/Content/BlackBerry.css @@ -0,0 +1,4 @@ +body +{ + width: 315px; +} diff --git a/Web/Content/CreateLog/BlackBerry.css b/Web/Content/CreateLog/BlackBerry.css new file mode 100644 index 0000000..58f816e --- /dev/null +++ b/Web/Content/CreateLog/BlackBerry.css @@ -0,0 +1,25 @@ +.editor-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 8px; +} + +.display-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 8px; +} + +.logType.editor-field-container +{ + padding-right: 0px; +} + +.submit +{ + display: inline-block; + padding-left: 20px; + vertical-align: middle; +} \ No newline at end of file diff --git a/Web/Content/CreateLog/Index.css b/Web/Content/CreateLog/Index.css new file mode 100644 index 0000000..bc38a92 --- /dev/null +++ b/Web/Content/CreateLog/Index.css @@ -0,0 +1,22 @@ + +fieldset +{ + width: 375px; + margin-left: auto; + margin-right: auto; +} + +.display-field-container, .editor-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 15px; + padding-bottom: 20px; +} + +.submit +{ + display: inline-block; + padding-left: 40px; + padding-top: 27px; +} diff --git a/Web/Content/Header.png b/Web/Content/Header.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf2999ebccd53500830b71324d03ecbcedc7258 GIT binary patch literal 11454 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 bZ>5qpb^Adi^6RPp6eCNED?qA54gLQYcoUj3 literal 0 HcmV?d00001 diff --git a/Web/Content/Rainbow.png b/Web/Content/Rainbow.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4162cd181701adf743adcc558d5a29b18d048b GIT binary patch literal 1205 zcmaJ>TWAzl7#{JV5){ND!3#J{kRo*Fw#kk=WNY@8I*?5_yKA!#D$dTFBtx7z zi7klG7T<&ri=g;W&<8=q7X=^Mx3rHHatu*0#&~HFE$PKdFQ@;k+1Q6}XE;~B@B6=V z{(t6laqz=U9osuNj@xAH&y`>lq3ztT9{N3VpMC|yHj=NBG9DpyGeBJ0#x=wnt~rWI z$h0SqeTRBEZawc*s-#*N&@JqWW`q$Nt`BUE>)qGzO=}zxzJ^8}FD1OZ{k6b5c1jrT zDaZvsi^iP&QvoVZ4OXnFaVu#H`##`%8#)NMh?soCJ?e#eBPBF-b(lxnlE611WIQFj zF;y)T`790)-y_N~OHRmqLJ^gCx29?D^Qx@KlB`OK8dEequIjSPuRa1q3+xfSlv0hWqmq(LCL;}1jR7JSPI|;_#JsSprI16R6*xX|u*XM=W(`k} zlmJfO9KrS1WW8|pn&85uhUrU+C`U(X0Skryhq~?>IwU3Z*6)7`hm}bmNhK8GiNJ!y zjdVq!d_5Z=li;9&@zK^T7RNBb;TZP$Y`KRYc03!`!zQ{=&1;yN@`+4b>(|s4H;1hW7kQ+`wcm2HZMjh)xIRSAp};wg z?EV0|eDlD%)80$6t==lvZto@CmMei7DN5_V(%jmD+KHxXMGK3yvPT}&dH_Yek}w{_ z2XU@AP{}V+_JYx082ytn_L~09X!C{D^ViXAkuEW|K&5OfB zcRGi**6byFW^|}r99}m2%HGLK2jBT3ICMSea)p^k{>HhP9a|n9*y+t)J71c8R-7e= zZVbE^`*_cRs~=sc&h3t^o9?{Q-LY*&-Sye&zKfT<%O#`l@U8OAMQ(%4ee&SgH$Q#* RV;KENjQn8kYUaqPe*mZF;cox{ literal 0 HcmV?d00001 diff --git a/Web/Content/Site.css b/Web/Content/Site.css new file mode 100644 index 0000000..9056c93 --- /dev/null +++ b/Web/Content/Site.css @@ -0,0 +1,465 @@ +body +{ + background-image: url('/Content/Background.png'); + background-repeat: repeat-x; + background-color: #b4eff6; + font-size: 85%; + font-family: "lucida grande",tahoma,verdana,arial,sans-serif; + margin: 0; + padding: 0; + color: #696969; +} + +a:link { + color: #2f3569; + text-decoration: underline; +} + +a:visited { + color: #1f2346; + text-decoration: underline; +} + +a:hover { + color: #b76d00; + text-decoration: none; +} + +a:active { + color: #d57f00; +} + +p, ul { + margin-bottom: 20px; + line-height: 1.6em; +} + +header, +footer, +nav, +section { + display: block; +} + +/* HEADINGS +----------------------------------------------------------*/ +h1, h2, h3, h4, h5, h6 { + font-size: 1.5em; + color: #000; +} + +h1 { + font-size: 2em; + padding-bottom: 0; + margin-bottom: 0; +} + +h2 { + padding: 0 0 5px 0; +} + +h3 { + font-size: 1.2em; +} + +h4 { + font-size: 1.1em; +} + +h5, h6 { + font-size: 1em; +} + +/* PRIMARY LAYOUT ELEMENTS +----------------------------------------------------------*/ + +/* you can specify a greater or lesser percentage for the +page width. Or, you can specify an exact pixel width. */ +.page { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +header, #header { + position: relative; + margin-bottom: 0px; + color: #000; + padding: 0; +} + +header h1, #header h1 { + font-weight: bold; + padding: 5px 0; + margin: 0; + color: #fff; + border: none; + line-height: 2em; + font-size: 32px !important; +} + +#header h1 a +{ + color: #fff; + text-decoration: none; +} + +#main +{ + clear: both; + padding: 30px 30px 15px 30px; + background-color: #fff; + border-radius: 4px 0 0 0; + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; +} + +footer, +#footer { + background-color: #777; + color: #444; + padding: 10px 0; + text-align: center; + line-height: normal; + margin: 0 0 30px 0; + font-size: .9em; + border-radius: 0 0 4px 4px; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; +} + +/* TAB MENU +----------------------------------------------------------*/ +ul#menu { + border-bottom: 1px #73acb3 solid; + padding: 0 0 2px; + position: relative; + margin: 0; + text-align: right; +} + +ul#menu li { + display: inline; + list-style: none; +} + +ul#menu li#greeting { + padding: 10px 20px; + font-weight: bold; + text-decoration: none; + line-height: 2.8em; + color: #fff; +} + +ul#menu li a { + padding: 10px 20px; + font-weight: bold; + text-decoration: none; + line-height: 2.8em; + background-color: #d0d9c2; + color: #d57f00; + border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; +} + +ul#menu li a:hover { + background-color: #f1fff8; + text-decoration: none; +} + +ul#menu li a:active { + background-color: #f1fff8; + text-decoration: none; +} + +ul#menu li.selected a { + background-color: #fff; + color: #000; +} + +/* FORM LAYOUT ELEMENTS +----------------------------------------------------------*/ + +fieldset +{ + border: 2px solid #81B3B3; + width: 675px; + padding: 0 1.4em 1.4em 1.4em; + margin-right: auto; +} + +legend { + font-size: 1.2em; + font-weight: bold; +} + +textarea { + min-height: 75px; +} + +input[type="text"], +input[type="password"] { + border: 1px solid #ccc; + color: #444; + width: 200px; + width: 100px; +} + +select { + border: 1px solid #ccc; + padding: 2px; + color: #444; +} + +/* TABLE +----------------------------------------------------------*/ + +table { + border: solid 1px #e4f2f2; + border-collapse: collapse; +} + +table td { + padding: 4px; + border: solid 1px #e4f2f2; +} + +table th { + padding: 6px 4px; + text-align: left; + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + +tbody td:nth-of-type(odd), +tbody tr:nth-of-type(odd){ + background:rgba(232, 238, 244, 0.25); +} + +table tfoot td { + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + + +/* MISC +----------------------------------------------------------*/ +.clear { + clear: both; +} + +.error { + color: Red; +} + +nav, +#menucontainer { + margin-top: 5px; + clear: both; + float: left; +} + +div#title { + display: block; + float: left; + text-align: left; +} + +div#title a +{ + border-width: 0px; +} + +form#filter +{ + display: inline-block; +} +div#newLog +{ + display: inline-block; +} + + +/* Styles for validation helpers +-----------------------------------------------------------*/ +.field-validation-error { + color: #AA5755; + display: block; +} + +.field-validation-valid { + display: none; +} + +.input-validation-error { + border: 1px solid #6E1E1C; + background-color: #F3E2E2; +} + +.validation-summary-errors { + font-weight: bold; + color: #ff0000; +} + +.validation-summary-valid { + display: none; +} + +/* Styles for editor and display helpers +----------------------------------------------------------*/ +.display-field-container, .editor-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 15px; + padding-bottom: 10px; +} + +.display-label, +.editor-label +{ + color: #7F6F50; + margin: 1em 0 0 0; +} + +.display-field, +.editor-field { + margin: 0.5em 0 0 0; + font-weight: bold; +} + +.text-box { + width: 30em; +} + +.text-box.multi-line { + height: 6.5em; +} + +.tri-state { + width: 6em; +} + +.format-hint +{ + color: #806F50; + font-size: .8em; + font-style: italic; + margin-top: 2px; + padding-left: 5px; +} + + +/* Input types */ + +.vehicleId input +{ + width: 60px; +} + +.endOdometer input +{ + width: 60px; +} + +.gasPurchased input +{ + width: 45px; +} + +.date input +{ + width: 70px; +} + +.units +{ + font-size: .9em; +} + +.employeeName input +{ + width: 135px; +} + +.cityName input +{ + width: 125px; +} + +.logType .radiobutton +{ + display: block; +} + +.modelYear input +{ + width: 40px; +} + +.make input +{ + width: 80px +} + +.key input +{ + width: 30px +} + +.model input +{ + width: 80px +} + +.vin input +{ + width: 150px +} + +.report-miles +{ + text-decoration: underline; +} + +.report-calculation +{ + display: none; +} + +.report-calculation table +{ + width: 100%; +} + +.ui-icon +{ +display: inline-block !important; +} + +.qtip-content h5 +{ + margin-top: 3px; + margin-bottom: 3px; +} + +.qtip-content p +{ + margin-top: 3px; + margin-bottom: 3px; +} + +.ui-message +{ + display: block; + margin-top: 10px; + padding: 3px; +} + +@media print { + #header, + #footer, + .no-print + { display:none } +} \ No newline at end of file diff --git a/Web/Content/Site.min.css b/Web/Content/Site.min.css new file mode 100644 index 0000000..4bcfdc3 --- /dev/null +++ b/Web/Content/Site.min.css @@ -0,0 +1,253 @@ +body +{ + font-size: 75%; + font-family: "lucida grande",tahoma,verdana,arial,sans-serif; + color: #232323; + background-color: #fff; +} + +#header +{ + width: 452px; + margin-left: auto; + margin-right: auto; +} + +input[type="radio"] +{ + margin-left: 3px; +} + +h4 +{ + color: #366; + margin: 3px; +} + + +/* TABLE +----------------------------------------------------------*/ + +table { + border: solid 1px #e4f2f2; + border-collapse: collapse; +} + +table td { + padding: 4px; + border: solid 1px #e4f2f2; +} + +table th +{ + color: #7F6F50; + padding: 6px 4px; + text-align: left; + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + +tbody td:nth-of-type(odd), +tbody tr:nth-of-type(odd){ + background:rgba(228,242,242, 0.25); +} + +table tfoot td { + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + +/* Styles for basic forms http://colorschemedesigner.com/#3i31Sg0llw0w0 +-----------------------------------------------------------*/ + +fieldset +{ + border:2px solid #81B3B3; + padding:0 1.4em 1.4em 1.4em; + margin:0 0 1.5em 0; +} + +legend +{ + color: #366; + font-size:1.2em; + font-weight: bold; +} + +textarea +{ + min-height: 75px; +} + +.editor-label +{ + color: #7F6F50; + margin: 1em 0 0 0; + font-weight: bold; +} + +.editor-field +{ + margin:0.2em 0 0 0; +} + + +.display-label +{ + color: #7F6F50; + margin: 1em 0 0 0; + font-weight: bold; +} + +.display-field +{ + margin:0.2em 0 0 0; +} + + +/* Styles for validation helpers +-----------------------------------------------------------*/ +.field-validation-error +{ + color: #AA5755; + display: block; +} + +.field-validation-valid +{ + display: none; +} + +.input-validation-error +{ + border: 1px solid #6E1E1C; + background-color: #F3E2E2; +} + +.validation-summary-errors +{ + font-weight: bold; + color: #AA5755; +} + +.validation-summary-valid +{ + display: none; +} + +/* Input types */ + +.vehicleId input +{ + width: 60px; +} + +.endOdometer input +{ + width: 60px; +} + +.gasPurchased input +{ + width: 45px; +} + +.date input +{ + width: 70px; +} + +.units +{ + font-size: .9em; +} + +.employeeName input +{ + width: 135px; +} + +.cityName input +{ + width: 125px; +} + +.logType .radiobutton +{ + display: block; +} + +/* Errors */ + + +.vehicle-id .field-validation-error +{ + width: 60px; +} + +.odometer .field-validation-error +{ + width: 80px; +} + +.gas .field-validation-error +{ + width: 45px; +} + +.date .field-validation-error +{ + width: 70px; +} + +.employeeName .field-validation-error +{ + width: 135px; +} + +.cityName .field-validation-error +{ + width: 125px; +} + +/* hint! */ + +.format-hint +{ + color: #806F50; + font-size: .8em; + font-style: italic; + margin-top: 2px; + padding-left: 5px; +} + +.subscript +{ + font-size: .8em; + font-style: italic; +} + +.warning +{ + background-color: yellow; +} + +span#icon-employee-history +{ + position: relative; + display: inline-block; + left: -20px; + bottom: -3px; + margin-right: -20px; +} + +.transparent { + opacity: 0.1; +} + +.loading { + background-image: url('/Content/spinner.gif'); + background-repeat: no-repeat; + background-position: right; + padding-right: 20px; +} \ No newline at end of file diff --git a/Web/Content/VehicleColors.css b/Web/Content/VehicleColors.css new file mode 100644 index 0000000..fab6326 --- /dev/null +++ b/Web/Content/VehicleColors.css @@ -0,0 +1,84 @@ + +.White +{ + color:Gray; + background-color: White; +} + +.Gold +{ + color:Black; + background-color: #E8D138; +} + +.Maroon +{ + color:White; + background-color: #800000; +} + +.Green +{ + color:White; + background-color: #008000; +} + +.Black +{ + color:White; + background-color: Black; +} + +.Blue +{ + color:White; + background-color: #0000D0; +} + +.DkBlue +{ + color:White; + background-color: #000080; +} + +.Purple +{ + color:White; + background-color: Purple; +} + +.Beige +{ + color: Black; + background-color: #F5F5DC; +} + +.Silver,.SilverIce +{ + color: Black; + background-color: #C0C0C0; +} + +.Burgundy, .Burgandy +{ + color: White; + background-color: #900020; +} + +.Brown +{ + color: White; + background-color: rgb(111, 81, 0); +} + +.Red +{ + color: White; + background-color: Red; +} + +.Unknown +{ + color: Black; + background-image: url('/Content/Rainbow.png'); +} \ No newline at end of file diff --git a/Web/Content/spinner.gif b/Web/Content/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ed786f2ece49ec5db07dee13a56ef38025b628c GIT binary patch literal 2037 zcmY*ZcTf|19{+AO8xjIZfItFCFrkL3BodGwflvety+|>T03uy{D35o<4X`9Q3=bSU zojZMs3Qw_)j=f_!)B!!mUKqwc>ezd^4c;H{$Ifr|uTTHRC8&buXgI)uM*u&6{`~Rd zM}L3+_wV1IK7G1x-@ebEKY#i1<^B8j-@bj@wr$&s7cWknII(;8?sMnPJ$(4^-Me>t z_wN1p@#D#pCr3v|A3b`6qUeJM5ANT;KRi7A^5x65YuBDSb?WNXs}mCwVPRo|gM+(v z?RxX(&Gzlv_w3no`}XavTesf4dGq@9>xT~?_VDnybm`KK8#fLfJh*P%x(gRB?AWp6 z>({T(pFdAaOMCY0SzBA%hYueT6BF;;xnpHzb@}q;O`A4(d3im4{J5Z?;ONn#0|NsW zFJ9cgfB);(ugAv5a&vP_OG`&aMz(C(^6J&A@$vBk2M!!Re*DRkCvV@rJ%9duQ&ZFC z&6|%MJC>4?a{Bb?vuDqqIdg`~z*4Ws1>(;I2=4ORL zQCC-|R4OYgD_5;rwQSk44I4IW+_=%t&(GD>Rj=1yxpHM_Xh`ytnG&0k9<5Zz%KT@c z2mnYvQ>hsF`jQ_R5(mKIydH2saldkg!Gzlvi9nFeu<gyfnCs8|SGO1R0M3N~Sp zx@MoynP5Rh(303ldPHFemMT%$+lXy}A1JR?IwL6=E`apW=@Z-0R!QO^@j_&{6#;i|5R1o$ zJ1J~xCDQ$1cs9`DW9Z!)D)^+%&Ug81908UkMXX;jkp>#b+SE}d{`0S>>Ef(`Ns6oa zB~H-LX25y1!BDgW%?nC0$RettYz8zsuz>9Z!g8TH$kU;rwYWrSTkjuYCH9utgFU6b z*wzBKaG6IjEXYSpAo5j4&c(t zwi-c(Q6YX2N-v2q(mgN`>wuCTV&XSRUA4h-f8g+uV2k_=o;2wb`7N)&+7T-C+CT_Bu4KrjWmK>x0AbH2rmR&7+q6fX+R0o&}V!t?TP+g0{x`8PSP{7CvnEPL^Hzx^T2Eus2 zi$U6ZM7}+l%$}afWn#%|+MPTsC236GKi9-ad*Z9;Ymg?jSO$L1s$w4BvDzu_kH9>z zTWC{K?jx4~H3oGGt3}I}LWNw@H)C>9GF4^|x(5n#+Va}kr_cb>{a+K%>B+@JNrC8? zJOUkD3fe*NdA-rJupqo?FfRK}k zOm!l7Dj$dsL|kS`3FL3^@^7axrU9d*@79yf!+bu3kXbziU!v&TO3p#w{y_lYG5ZPzDh;giB_lkGp((nqZ12&%LTrgm4vY= z{ffd0B$DiUKReJ9>?{#_KVrMyhiu_A8fNd!&DWTZ4+9S|1lJHkLv-^}a0IC{WI9N! zQTY-}db!%OH^;l2ZeajnA&Q6Uv=#0KZB9;^^lzMOi^0~bS~m!&K#e6hia79(ItV9M SXP~*+AU!zMlD%~Wg#Hic*k=_0 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png b/Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png b/Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l#Zv1V~E7mI3`<(O3xvulR&VAkQJHZBho(m=l0{{SA7UpJl008iB z3Rqvn`1P1SiomLXkg776;)RSXXXV1Iqu_@e2%8dEPZ*NvG6-d*$oWlBXKKg zV({l@ll0gM+F;pm#SBg*2mQ!Rn_HBhT&5w_d`jyG6+_vuxMHXoKj|Yh2EGJ-B`N+E z$pmy>sA-*C0S`BfHv`&Y>Z626r?uZY8?`zzbXj7u1}` z;TS<~e1eY(jD4j)wElgyeR*V7`qdhf3S5Vcdq_R*a&F^r|9|M*i>!yeL)xMH?-6M_ zJjl&7(M|RQJ2z;fI7;E!$?Pfq$usWpjLxzlazT~K6v`ft@@P32;&o$5@b}Yj#d~r) z9^2%vhdyIgOXOGiCNOR_sjx3j8*01pUqQBn7r}I@E53HUy&DusRETO9wG~Rdfx=Ta zwD>0smtXx6l#X>f`lTc3c!pmLbwTP$Zfe7s__87<&i+s33P`Udim99RAA$T_Y7T3^ z>vV9wL8Sc0x! z_eRl4cEFZ`EXPfL3omdIIY|MS@P4-79I_Af%(!ONP=msk&*mFs^(0gOj->4HEJ}Ca zL(HZSEXEQH#fbJDfQ^RQnvtlx$kD>NeLhPB+yUp!E5O$&?fP1}JdI;l4(=H(hEfAQ zNRU;>uU@{f`2)^*UI^NA8VHraDlXrE*?OWOs z7D#P(ftiy|@ab?=t923@#mR}=S6GNj1 z?mTR4hby}vE*2>Wg7-X!KAz3vwvJ)qVMtB~**$wrQ^&0>;8UR6E7imZV-)iH?Tt~> zX-EGVhMYWVxX}dU)MQaN+jv0*8;3JBy*az#1aW|^_4%i?mlU$yRTy>-wCJJVC==P> zEx=B7cZ&E7jJ@{Z{CG+0A-lAG;ovs3FALs8|JLq?o#M-to~~wx^JI)GhP%l=X?-mS zEbfx}Nj)D74<>(1{)gt2^%v7UAlLYp6gO$gsv=`$#2)3F9ed8@mcK6i!h@mGQqU}e zyItCAfl~4IqG~(AU2lV?`)nu#S5+1BrCJv>QmoI?LyuLj8e^o>li?U6OMey{r_T(* zY8RG<@x>cK$(nNMlhy)E`{;|c6$@%L*hZEYs{mUmt$8-u8m?YV3{83m{YAwB%6Y{L z6k9V^jd0tnd%q4+xwp&Yfr#>WqoooH9K5xYM|V_s8{16~N?TcuYd@6+y1_aS;c{q^(Kyv6DZcFd zd@RkCqyC{5yX5E=oHd-`WBQ0I>9_&^<}<7793`JA=$mRuSrr}iQyzxG9T)%=Xp2g4 zkFI*p1^XIjQQE0yQNGyZNn{h@1;N1>r@)!(21u5LGg2Ob1==Thh`ZXost~Y05y+XE zrc7k%zx|Fxe^LX9HhqjcV~P|W`3AXYj%WAaFNz@uZ-xRmf!NHrNh4zKSO1WrwFL6P zXM}G=*p9v_k=mUmpg-$Y6I7Mt4@y2D+ys?c;_C@aVePnKabqAS%y%AoFzKI#JaeQxo%Il=}>GqqqxhG8cPyu>P?R=}Ol7vhvDcW{Z8i0Zn zzm^YCS5qT4m#*SycTaxzIpnMMHwFrEO>lJzqr0i6lGn6M7x;$7B7Iy)6renY$OiZc zMEFF-;Ff)@RWrYEodz{P?avD?^RtUsN$GEP>xrgxlbtd22`L1q+Vm;zyBzLIj#2fp zQZS2sUF)*%MR5S(jid&TIT<2`Js!yUdi}%lzzxkuKjf|bHvGZz#1l5%O0plla6C28K&%)=R}0F6xRI>HvM|=4x#=-to|lSN^N9P6&xIP z2dq0{CX-Xc&YJNeXXD#dn;c9feR-*P_CfUEp8(wN{z!yEZrI*MPs**fh@b|xe*S&i zHc8i5C2XFuJ)xhg7K~%2H`zsX?JhZT+>};UB5HaE$E92V@>aXAPbP zjHGY7LH_&c+;-7yblDf5tKrky!+N>Vx>?)QZi1hm1Aea(92RyRiFczw&w7)GT*KddVhT(T~0Egdo9qyLRosyG6?!=QbqPzk^x9!b!;O zjEYZ(YM2+oYg-TrJTt9??(26|bMF?&#cgl&%SzC;-tOToW%SoAmvaoExO%bz%?xjk zc(|{^J<~z4;>Loltn&Q#cD-zLlA0oFa(P1*5{sdl$v0#75<`$?CT{uv?urEF5%l#% z1*lLBO|PYH2z}OUCDP!56T6(s<{oG|TOAmiP3Z95>EKzFu=~wRiHd}%-yn`p^?J6( zih27|xpMpU0(-^Ma=J7`xm^&DhSqXkjnQt=LQjM?m_ss!!0cIcfgCXk7TijCGz5At zUKx0OZ(Pc2owm3zR5RS0N)Y#iMfl$WQCVB&sa%OY<#3FtYF&H{`S5{&n#aQKe2Se9 zB?KD>qbcT%&$2w0lfgg>hoa-{bj}D!0GrB0(o9%dP6Pxsw8y%(rU7O|*#fSHYBm2h zyytq$C(2?`j}W=ORiP$Y;41*}G=Y$(2OhqHVfd_b2NmhSboLunMtOr5!~U=jF_g7g zx!U^R$M++HtM%nJWA0HW6A->{j|_B;D@i9waP$)>{6HyW zi?%Q-uGS3xs5_COdmgZjld7Pfo4dBxil@eQDw4^F*Vcb}d)bfW?|OD#N(nd^;T^jB zZea;L9}obXL9cH4o}9qQv(@ovFw_meU5D94g#m>tZ>F(pY-+sVc~p1lWWYncfsZBD zlLUulh#8ZKbJZaXx~7T%9*9kCI?ptUWNtB6zk6wB?Esa@U>adq3-GJsAap@@buxd8 zEh*0kH65g*0pwfcCE82`98Gls@jB5(U`@lWMLxq4sPDlmq!Rv*Vp(zSX$437XGBPqZRXNva3-1V4LK`FF19js@6mZK*48gf-Z-ZNB zLM=}?fKd18YCyN<3I%#wqeFjR9^PLn0C|nbyn1-&Ph!re@O0EEp`97_ouN^T>luaA zQbRd68s2B-M1Q}bL`59M`{jC(<_`P4m+_LOgr`2Gt(Rm4y+wDaGcvik0$;t-0c3C{ zKhx0TB~7CpakFn?r9>!&+;ccIO!hd{$-sX1k+O&#=VmV@?^gOz?c=kZ*8x}L)H)dP zYzhfqNU`(IVUtd)A!)GN@5UL@&OX&+@1C?lb`+!>)>=w1JnE$X>Lw#Yjk7&t)#5>X#Cjs|&jQ!X46aWn?QOjkKm*1G ztbhAifM)AKF=tIbp&vSIPqX&9FQ`BEN|??$UXR)85VQkj*P`!)ht-9)fQ|t&EI}c) zY_Dp0Km2C(q8potDF7er6kZ;VOs*dAVznYFU=Tj)$Gq2%pheYQJdTMt)xV?d0aA0f zf!9BB;E?X!!FWTWHx>8q_1{a`32+aVn2QqF4@>>wO;ea#m&96EhNkjIR(#vwq%yr` zfH0w))fHpM%M^W;nW$_)tb@EVVvhrYi*g_wUlF^|U`HFf<~&JOeBOMX&56=R~^VwL+|j!Ca?>Tx==&$#g^C#2+mS?tyG29g?7BC;5|* zhNhNJ?*-LgdlM)3Jx?L+w7;FK4mFXC;;XzQ429NM`AD>QNUJVX`T3s9}m~hbK7csE0P(!l|C~FWjU=g#?C}12ipKQAA~kz3%msO zg2N0*dRqd|SG=WcPVM-2UAcd>w1y8d%zsl=9Z^nq83TK_9xPH=!{}}AuqY7aaFPnP l;BjQ_^4`vQQuBMqxOYB4T*@HG=I>V@U~v|0R%wcf{y%IJ0Z9M= literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png b/Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..45e8928e5284adacea3f9ec07b9b50667d2ac65f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-icons_454545_256x240.png b/Web/Content/themes/base/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c GIT binary patch literal 4369 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 k*Kv;w;*%(i9W@fAqs5i2wiq literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/images/ui-icons_888888_256x240.png b/Web/Content/themes/base/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba708c39172a69e069136bd1309c4322c61f571 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/jquery-ui.css b/Web/Content/themes/base/jquery-ui.css new file mode 100644 index 0000000..37fcca7 --- /dev/null +++ b/Web/Content/themes/base/jquery-ui.css @@ -0,0 +1,466 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.tabs.css, jquery.ui.theme.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } + +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.19 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ + +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } + +.ui-progressbar { height:2em; text-align: left; overflow: hidden; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } + +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { color: #222222/*{fcContent}*/; } +.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.accordion.css b/Web/Content/themes/base/jquery.ui.accordion.css new file mode 100644 index 0000000..b98034f --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.accordion.css @@ -0,0 +1,19 @@ +/*! + * jQuery UI Accordion 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } diff --git a/Web/Content/themes/base/jquery.ui.all.css b/Web/Content/themes/base/jquery.ui.all.css new file mode 100644 index 0000000..3932c99 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.all.css @@ -0,0 +1,11 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming + */ +@import "jquery.ui.base.css"; +@import "jquery.ui.theme.css"; diff --git a/Web/Content/themes/base/jquery.ui.autocomplete.css b/Web/Content/themes/base/jquery.ui.autocomplete.css new file mode 100644 index 0000000..7ca513b --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.autocomplete.css @@ -0,0 +1,53 @@ +/*! + * jQuery UI Autocomplete 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.19 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} diff --git a/Web/Content/themes/base/jquery.ui.base.css b/Web/Content/themes/base/jquery.ui.base.css new file mode 100644 index 0000000..6598e80 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.base.css @@ -0,0 +1,21 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming + */ +@import url("jquery.ui.core.css"); + +@import url("jquery.ui.accordion.css"); +@import url("jquery.ui.autocomplete.css"); +@import url("jquery.ui.button.css"); +@import url("jquery.ui.datepicker.css"); +@import url("jquery.ui.dialog.css"); +@import url("jquery.ui.progressbar.css"); +@import url("jquery.ui.resizable.css"); +@import url("jquery.ui.selectable.css"); +@import url("jquery.ui.slider.css"); +@import url("jquery.ui.tabs.css"); diff --git a/Web/Content/themes/base/jquery.ui.button.css b/Web/Content/themes/base/jquery.ui.button.css new file mode 100644 index 0000000..8b3de3d --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.button.css @@ -0,0 +1,38 @@ +/*! + * jQuery UI Button 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ diff --git a/Web/Content/themes/base/jquery.ui.core.css b/Web/Content/themes/base/jquery.ui.core.css new file mode 100644 index 0000000..38b5426 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.core.css @@ -0,0 +1,38 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/Web/Content/themes/base/jquery.ui.datepicker.css b/Web/Content/themes/base/jquery.ui.datepicker.css new file mode 100644 index 0000000..bb532e0 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.datepicker.css @@ -0,0 +1,68 @@ +/*! + * jQuery UI Datepicker 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.dialog.css b/Web/Content/themes/base/jquery.ui.dialog.css new file mode 100644 index 0000000..6bac05c --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.dialog.css @@ -0,0 +1,21 @@ +/*! + * jQuery UI Dialog 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/Web/Content/themes/base/jquery.ui.progressbar.css b/Web/Content/themes/base/jquery.ui.progressbar.css new file mode 100644 index 0000000..9e86586 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.progressbar.css @@ -0,0 +1,11 @@ +/*! + * jQuery UI Progressbar 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; overflow: hidden; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.resizable.css b/Web/Content/themes/base/jquery.ui.resizable.css new file mode 100644 index 0000000..57b7158 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.resizable.css @@ -0,0 +1,20 @@ +/*! + * jQuery UI Resizable 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.selectable.css b/Web/Content/themes/base/jquery.ui.selectable.css new file mode 100644 index 0000000..d3ef7c3 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.selectable.css @@ -0,0 +1,10 @@ +/*! + * jQuery UI Selectable 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } diff --git a/Web/Content/themes/base/jquery.ui.slider.css b/Web/Content/themes/base/jquery.ui.slider.css new file mode 100644 index 0000000..1491d6b --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.slider.css @@ -0,0 +1,24 @@ +/*! + * jQuery UI Slider 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.tabs.css b/Web/Content/themes/base/jquery.ui.tabs.css new file mode 100644 index 0000000..20bc1ca --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.tabs.css @@ -0,0 +1,18 @@ +/*! + * jQuery UI Tabs 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/Web/Content/themes/base/jquery.ui.theme.css b/Web/Content/themes/base/jquery.ui.theme.css new file mode 100644 index 0000000..9e16251 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.theme.css @@ -0,0 +1,247 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { color: #222222/*{fcContent}*/; } +.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git a/Web/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png b/Web/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png b/Web/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Web/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 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 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..45e8928e5284adacea3f9ec07b9b50667d2ac65f GIT binary patch literal 4369 zcmd^?`8O2)_s3^phOrG}UnfiUEn8(9QW1?MNkxXVDEpFin2{xWrLx5kBC;k~GmFhwsn)TR1w<4t)tA3_robX4CdCOHJC|7j+vW z%J-EMX&`87enIluaSc0_SnYUx$GzUc?vrNXt&I`o?~7C3RJ>C-Ajq!3AfU8Dx90^_ zp3}MKjJzYC+`T(&egFXQ#9Ek{*oVAaa!zrZtmlRFnwQPRJXH<%pkK2*eP`pT=lwD7 zifq+4BY_rUTa+U|2#&?i7>PVvD?7R4ZfOLPT{e9G~G!Ls3s8JtQE`jMM9wl2V9&Q+K2DHW0M+uQmEr%nYJ^7cK?uIpU-)=wn71ZZ-=@ar0;3^AY z5+TI{2b(e%t{2PZ^HKF*vu@+Xr&BAc@2BC4 z_vCgww#i=)ea5Vo$glEEVBBg_VPBj!)OO>)f@}#dg6ULOeC>LBHz<;*5Y;YfE0lNx zg{N+4@lO~ozxpF69qV@VOGnc248Iuag4C1T)P^(hWkpP!{h!JekX}m^Q#b2B4f1oT zIjsGz)4}-$rQ*-tSuc%qG>%<4xM#E& zN)7lRK~^2VdiloY4>;#}A!yHOAXEmEi^+eA#05pawGXs>!z)gSoDuI#>bRCq-qjJe zZ)r=A`*EMX6+)~er1kdv1L^)0-PsAEM7JF$O6G8>496$24lkOSR^RTfUuIz%iSfn5b-t!##cs7sQI);gdAvqmn_v|%I9k;fCPl0Z)R1+hNQONJN zH%3jT9sOq*a`LF*MiY=zlSSQZ;{_FL9M07A=In+O!~wR}=bzGEQpk2!Vc0p)qKAH? zOk{(%06W#)DdICQ_S%Q@<0Y+!?9%#$gWJ%)EO->^YZP{<`oB4~9xh zL9-0*c4@B#O2ylYs_g`Ky$zb~v!M`NRaMNFYF*Gsu|7)=JyyMHjFC=HhGUE@{aI|B zJ~ITXU052%7jFb5Ys#fhS_?4kqc7H0EU49B8(Chg0&JzU=Gka#xOz1)H0d4m7ZnRA z=M^tdY|U6T!fmte{W?_r8H~qdq|q{5AMU_2It1I4143n~xL?4&K#BOB48l9_Rdm!(c^C?JU;tF0 zEh@o1y6Qa_>}#AwX{VY+`C^kNkxhgb1P5cB0%xupAXyg9NO=SnXrJUE?rQg{Lcsn+ zAZKctGLfbK_B#^&Nev|0^fB&?DN=ak8|0!np524LD25=s84BP8Vl(3=jflNp{X>e@ z637Ri5xx;&JNl+XYImA|{;XR~P*svYDEWYJ6I5!6uO~2twFC1ZQevB7#3z~(apxn& z^J@>Mc`>PJair{yT`iuan-V+i%|Ho-pA<1?V-k^R2Q<5;Co%XxmL` z018t4T0TTwO^w)Gx{9OSJ^9_|kgwX`7%0Rw!PO~@?xvnfUehvN;2Rc;^l>3kfbtk3 z8{j7p;S&{uTlTe9&HTc38q@%_KQFk<&n{vmrN7y&Cz{etcE->rq!6HL)2F!aa=0%! zM%Bwo!7TQ5t;@a_#Q}sjk{UebWQZ8{cp&HN^$*JfH#8spkhk{R@CVBiPuP@yEhu{} zsQfuhTqV%rioATpEphMfhyRYbVfVW`YwLFXUWm-===J(byMf!5;W^CV1g~2194Xx) zFK|z{pm%n-)-DRe{Qhk(d!QaoI*y%Wn6h7<6A{i*Sob&B^y|Spg!&J$`kN>zwUJ3x zaB$ciu*0FJKg}T ztgnh)ASF8njz5>h6?f#{c=*Yr4W_34$GmVIo8OLWjcZK4a0`+Yv-!*}9 zBwKm;DAsA(nDI-`iH@;`=gP+m{lgFLHK3m$W@?)&dGhDA_Z2xOzI0$p(ZJtH$vCxE zj>+kYNBJzs-TlSx!tSH}%I9fQv)mc!C7X0bKlZv4f&}C3+O-4k7AmVO|KYZ9ydP%(N1^uisV8y;~p`x4qFXD?!_OyN9=w(Od6W; zGrT?G;l2v@Ob5k^8w<9w%Jbjb^|H}PYKo}I~bobd!XrTbzp2Zp~H8lgJ)I3?l&(bDiWf8gE&6b z>)9GB=Iu-6%I((+>=jGP>CzD8c0oWITFZGgM!Q7|JrUYq4#^Y(vuDu-a>OWDa4Y4} z5a_*lW#IL_aVf8L+Ty}c&2VojLEIA-;eQK6Wo?xAuK>i;1VWx3c=!s2;j_*iRHOsb*>6-CgcYP+Ho=L@XLd*j~2ln-;WHg)|cCixksH$K={5rGSD@yB%LI|(NCc8 z1Er8H+QO)~S~K{g?nH|2dB8SKs)BxQ?%G}}o*LV!NG2m*TmR|pWj~g`>)ClJCE#F$ zcj)fBg(dKOKmc$Cy}IRlasngIR>z~kP&WW~9cC951{AKmnZ~ZMsqup6QQf7J0T1;C zK9*Qd5*(HxW=tl|RfjO>nkoW#AU3t>JkuzWxy4-l?xmTv15_r1X@p@dz^{&j&;{Mq z$^0$0q&y?kbdZh)kZ+NfXfqLTG}Q^j>qHlUH4VEK`3y^-z6Y<6O88Hf4v^;}!{t-a zDWg;znYu%6zA1~A5~w?fxO~i8-Ib(^02{c4pXjhDI^2 zXB1LP4dvWuc%PXQ{r!d#6>${rm+M8EJM8yf#!H$Kp8AxwUXm5`7Tu-J$mHeCG>vw|&Ay415}_1w&*9K8+2d3v1N+@a$|820o4u60Tj@u&kI!~q2V9X; z>tMvQDI|O$#m+m2O**ZHq`_{#8)ry6`&5s~2k{O4Du16Fn0P;&_(0!e5%Bel){nU0 zJX~<8U6hoI%yx}qGY_1Tq7YKDJ)ETOCs&W)TiCrK*1%DE*vXdD-7hwE*LUgjeHRM` z&@pkhTi>m#Kc+QIK+2Ybn9-sFVKNHyIgfob4H_77yYh))Rq$7Pw|+aD6&yZ|ki9 z8Zb6s{oBt1G+PgfIcxd}{m@~1nzhe;LH)5;!gS8@ddyabpdBc?7JVl?tS+<#bPSMT z2@0uYdsWN(;Ww)n-PlA-0r+62@bYkEa`k{0s})fJgYZ#5=DmIdEvok7aZJRi{w-|} zkea&6X}ZA3b7&vbDb7)v8CuI(+zzSf3z&P2eOrPNP?D~ zf zn0@)0h;~5F&BG5vOFU!=woW&ZSl~nrs{?1w>nWfW_dnpTd z4qvLDYJ*ft>Sp%M(^_xCZpNBnc66JX}A|ZL9IENM`U>`ph7d<+RQiI}@E8Y)70s zMC*_&))}GlmR}@{v9*nm)29-=rn`Q$rc^4G)GVQHlTr6BpGxtHuU(8AF7Ffh54?5w zj+EYT9>x)PWL-iQ@RNmT?R+|c@=FOmj)5Za6_ z@DkVy4l^L>Z3#SI@s_eVwd3D)<^Ivq8a~J{|4mhOL^<7M4D8){ut;GIqqn`oqCk|x pNh;Wa$C0(mdpqYz&F>xK-uVD=DT5%Jzh8ZT#aXmjr70%*{{S|9XD$E$ literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-icons_454545_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c GIT binary patch literal 4369 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 k*Kv;w;*%(i9W@fAqs5i2wiq literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/images/ui-icons_888888_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba708c39172a69e069136bd1309c4322c61f571 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/base/minified/jquery-ui.min.css b/Web/Content/themes/base/minified/jquery-ui.min.css new file mode 100644 index 0000000..2877280 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery-ui.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.tabs.css, jquery.ui.theme.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block}.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tabs .ui-tabs-hide{display:none!important}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget:active{outline:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.accordion.min.css b/Web/Content/themes/base/minified/jquery.ui.accordion.min.css new file mode 100644 index 0000000..0fc31a0 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.accordion.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.accordion.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.autocomplete.min.css b/Web/Content/themes/base/minified/jquery.ui.autocomplete.min.css new file mode 100644 index 0000000..0542c26 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.autocomplete.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.autocomplete.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.button.min.css b/Web/Content/themes/base/minified/jquery.ui.button.min.css new file mode 100644 index 0000000..9119bf7 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.button.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.button.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.core.min.css b/Web/Content/themes/base/minified/jquery.ui.core.min.css new file mode 100644 index 0000000..ca86368 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.core.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.datepicker.min.css b/Web/Content/themes/base/minified/jquery.ui.datepicker.min.css new file mode 100644 index 0000000..8599a0a --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.datepicker.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.datepicker.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.dialog.min.css b/Web/Content/themes/base/minified/jquery.ui.dialog.min.css new file mode 100644 index 0000000..d06ad39 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.dialog.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.dialog.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.progressbar.min.css b/Web/Content/themes/base/minified/jquery.ui.progressbar.min.css new file mode 100644 index 0000000..28ded5f --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.progressbar.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.progressbar.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.resizable.min.css b/Web/Content/themes/base/minified/jquery.ui.resizable.min.css new file mode 100644 index 0000000..a3cafb4 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.resizable.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.resizable.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.selectable.min.css b/Web/Content/themes/base/minified/jquery.ui.selectable.min.css new file mode 100644 index 0000000..4ae100e --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.selectable.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.selectable.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.slider.min.css b/Web/Content/themes/base/minified/jquery.ui.slider.min.css new file mode 100644 index 0000000..8bf7ae6 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.slider.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.tabs.min.css b/Web/Content/themes/base/minified/jquery.ui.tabs.min.css new file mode 100644 index 0000000..97468dc --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.tabs.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.tabs.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tabs .ui-tabs-hide{display:none!important} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.theme.min.css b/Web/Content/themes/base/minified/jquery.ui.theme.min.css new file mode 100644 index 0000000..00bde76 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.theme.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.theme.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget:active{outline:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px} \ No newline at end of file diff --git a/Web/Content/themes/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png b/Web/Content/themes/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png b/Web/Content/themes/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_55_ede3b1_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_55_ede3b1_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..688f719ff23d29c67d0ce9a75651b38a933ddc16 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAGVZ#9R3S1+qO|978O6-(Ga&I%FW>^6>k9 zl`Tpo5C8f<&W#COxLRW6^a;xZ%U+KU@XK9)KHoF&H)m;& zx;Hg!e#X88i^YEF8Kn%&^>%t|*GWvA=pi9?rOD-3M~gsu#;@n@HH;o-WjAhN&uIr* O%i!ti=d#Wzp$PzaH9T+t literal 0 HcmV?d00001 diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_75_dadada_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP>V~E7mtNn&t2Mh!bANl*g zTXypo!LVsxUR=@@*d@`}d!Xm{CWbl@PqEG^UKd3+pYVV6akaxKn^jxB{JDSDka5yC WE5px~^}m5;F?hQAxvXPmYTG^FX}c% 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 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/custom-theme/images/ui-icons_2e83ff_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/Web/Content/themes/custom-theme/images/ui-icons_454545_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..59bd45b907c4fd965697774ce8c5fc6b2fd9c105 GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@f3_WCF#rGn literal 0 HcmV?d00001 diff --git a/Web/Content/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab019b73ec11a485fa09378f3a0e155194f6a5d GIT binary patch literal 4369 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 GetLogs() + { + return _db.Logs; + } + + public Log GetLog(int id) + { + return _db.Logs.Find(id); + } + + public IEnumerable GetValidLogYears() + { + return + from l in GetLogs() + group l by new {year = l.Date.Year} + into y + orderby y.Key descending + select y.Key.year; + } + + public IEnumerable GetValidLogMonths(int year) + { + var start = new DateTime(year, 1, 1); + var end = new DateTime(year + 1, 1, 1); + return + from l in GetLogs() + where l.Date >= start && l.Date < end + group l by new { month = l.Date.Month } + into m + orderby m.Key descending + select m.Key.month; + } + + public IEnumerable GetLogIndexViewModels(IQueryable logs) + { + var t = + from log in logs + let previousLog = (from ol in _db.Logs + where ol.VehicleId == log.VehicleId && + ((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) || + (ol.EndOdometer == log.EndOdometer && ol.Created < log.Created)) + orderby ol.EndOdometer descending, ol.Created descending + select ol).FirstOrDefault() + select new {log, previousLog}; + return from l in t.ToList() + select new LogIndexViewModel(l.log, l.previousLog); + } + + public IEnumerable GetMonthlyVehicleMileageItems(LogQueryViewModel query) + { + var items = + from l in + from log in FilterLogs(_db.Logs, query) + let previousLog = (from ol in _db.Logs + where ol.VehicleId == log.VehicleId && + ((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) || + (ol.EndOdometer == log.EndOdometer && ol.Created < log.Created)) + orderby ol.EndOdometer descending, ol.Created descending + select ol).FirstOrDefault() + select new {log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0)} + group l by l.log.VehicleId + into g + join v in _db.Vehicles on g.Key equals v.VehicleId + let miles = g.Sum(l => l.miles) + let gasPurchased = g.Sum(l => l.log.GasPurchased) + where miles > 0 || gasPurchased > 0 + let logPairs = + from i in g + orderby i.log.Date descending , i.log.EndOdometer descending + select new { PreviousLog = i.previousLog, Log = i.log } + select + new + { + VehicleId = g.Key, + GasPurchased = gasPurchased, + Miles = miles, + v.Prog, + LogPairs = logPairs + }; + + return items.ToList().Select(i => new VehicleMileageItem + { + VehicleId = i.VehicleId, + GasPurchased = i.GasPurchased, + Miles = i.Miles, + Prog = i.Prog, + LogPairs = i.LogPairs.ToList() + .Select(lp => new Tuple(lp.PreviousLog, lp.Log)) + }); + } + + + public IEnumerable GetMonthlyEmployeeMileageItems(LogQueryViewModel query) + { + var items = + from l in + from log in FilterLogs(_db.Logs, query) + let previousLog = (from ol in _db.Logs + where ol.VehicleId == log.VehicleId && + ((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) || + (ol.EndOdometer == log.EndOdometer && ol.Created < log.Created)) + orderby ol.EndOdometer descending, ol.Created descending + select ol).FirstOrDefault() + select new { log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0) } + group l by l.log.EmployeeName + into g + let miles = g.Sum(l => l.miles) + let gasPurchased = g.Sum(l => l.log.GasPurchased) + where miles > 0 || gasPurchased > 0 + let logPairs = + from i in g + orderby i.log.Date descending, i.log.EndOdometer descending + select new { PreviousLog = i.previousLog, Log = i.log } + select + new + { + EmployeeName = g.Key, + GasPurchased = gasPurchased, + Miles = miles, + LogPairs = logPairs + }; + + return items.ToList().Select(i => new EmployeeMileageItem + { + EmployeeName = i.EmployeeName, + GasPurchased = i.GasPurchased, + Miles = i.Miles, + LogPairs = i.LogPairs.ToList() + .Select(lp => new Tuple(lp.PreviousLog, lp.Log)) + }); + } + + public static IQueryable FilterLogs(IQueryable logs, LogQueryViewModel query) + { + if (query.Year.HasValue & query.Month.HasValue) + { + var start = new DateTime(query.Year.Value, query.Month.Value, 1); + var end = start.AddMonths(1); + logs = logs.Where(l => l.Date >= start && l.Date < end); + } + + if (query.LogType.HasValue) + { + // WTF The specified value is not an instance of type 'Edm.Int32' + Expression> predicate; + switch (query.LogType.Value) + { + case MileageLogType.NonCommuting: + predicate = l => l.LogType.Value == 1; + break; + case MileageLogType.Commuting: + predicate = l => l.LogType.Value == 2; + break; + case MileageLogType.GasPurchase: + predicate = l => l.LogType.Value == 3; + break; + default: + throw new ArgumentOutOfRangeException(); + } + logs = logs.Where(predicate); + } + + return logs; + } + + public Log GetPreviousLog(Log current) + { + var vehicleId = current.VehicleId; + var date = current.Date; + var endOdometer = current.EndOdometer; + return GetPreviousLog(endOdometer, vehicleId, date, current.Created); + } + + public Log GetPreviousLog(int endOdometer, string vehicleId, DateTime date, DateTime created) + { + return GetPreviousLogQuery(endOdometer, vehicleId, date, created).FirstOrDefault(); + } + + private IOrderedQueryable GetPreviousLogQuery(int endOdometer, string vehicleId, DateTime date, DateTime created) + { + return from pl in _db.Logs + where pl.VehicleId == vehicleId && + ((pl.Date <= date && pl.EndOdometer < endOdometer) + || (pl.EndOdometer == endOdometer && pl.Created < created)) + orderby pl.EndOdometer descending, pl.Created descending + select pl; + } + + public Log GetNextLog(Log current) + { + var vehicleId = current.VehicleId; + var date = current.Date; + var endOdometer = current.EndOdometer; + return GetNextLog(endOdometer, vehicleId, date, current.Created); + } + + public Log GetNextLog(int endOdometer, string vehicleId, DateTime date, DateTime created) + { + return (from nl in GetLogs() + where nl.VehicleId == vehicleId && + ((nl.Date >= date && nl.EndOdometer > endOdometer) + || (nl.EndOdometer == endOdometer && nl.Created > created)) + orderby nl.EndOdometer ascending, nl.Created ascending + select nl).FirstOrDefault(); + } + + public void UpdateLog(Log log) + { + var currentLog = GetLog(log.LogId); + + // ignore these properties while updating + log.Created = currentLog.Created; + log.Source = currentLog.Source; + log.UserAgent = currentLog.UserAgent; + log.UserHostAddress = currentLog.UserHostAddress; + + _db.Entry(currentLog).CurrentValues.SetValues(log); + + _db.Entry(currentLog).State = EntityState.Modified; + _db.SaveChanges(); + + UpdateCurrentOdometer(log.VehicleId); + } + + public void DeleteLog(int id) + { + var log = _db.Logs.Find(id); + _db.Logs.Remove(log); + _db.SaveChanges(); + + UpdateCurrentOdometer(log.VehicleId); + } + + public IEnumerable GetRecentLogsByEmployee(string employeeName) + { + return + (from l in _db.Logs + where l.EmployeeName == employeeName + orderby l.Created descending + select l) + .Take(3) + .ToList(); + } + + #endregion + + #region Vehicle + + public void AddVehicle(Vehicle vehicle) + { + if (vehicle.Assigned == "Unassigned") + vehicle.Assigned = null; + _db.Vehicles.Add(vehicle); + _db.SaveChanges(); + } + + public IEnumerable GetVehicles() + { + var vehicles = _db.Vehicles; + return vehicles; + } + + public Vehicle GetVehicle(string id) + { + return _db.Vehicles.Find(id); + } + + public void UpdateVehicle(Vehicle vehicle) + { + if (vehicle.Assigned == "Unassigned") + vehicle.Assigned = null; + _db.Entry(vehicle).State = EntityState.Modified; + _db.SaveChanges(); + } + + public void UpdateCurrentOdometer(string vehicleId) + { + var mostRecentOdometerQuery = + from log in _db.Logs + where + log.VehicleId == vehicleId + orderby log.Date descending, log.EndOdometer descending + select log; + var mostRecentOdometer = mostRecentOdometerQuery.FirstOrDefault(); + var vehicle = _db.Vehicles.Find(vehicleId); + if (mostRecentOdometer != null && mostRecentOdometer.EndOdometer != vehicle.CurrentOdometer) + { + vehicle.CurrentOdometer = mostRecentOdometer.EndOdometer; + UpdateVehicle(vehicle); + } + } + + public void ValidateOdometerChronology(string vehicleId, int odometer, DateTime date) + { + var conflictingLog = GetFirstConflictingOdometerChronologyLog(vehicleId, date, odometer); + if (conflictingLog != null) + { + throw new ChronologicalOrderException( + String.Format( + "Odometer of {0} miles on {1:d} conflicts with other logs for vehicle {2}" + + ", including an odometer log of {3} miles on {4:d} reported by {5}.", + odometer, date, vehicleId, conflictingLog.EndOdometer, conflictingLog.Date, conflictingLog.EmployeeName)); + } + } + + public Log GetFirstConflictingOdometerChronologyLog(string vehicleId, DateTime date, int odometer) + { + // TODO HACK for testing, delete later + try + { + if (_db.Logs.Count() == 0) + return null; + } + catch (NullReferenceException) + { + return null; + } + + var conflictingLogsQuery = + from log in _db.Logs + let existingDate = log.Date + let existingOdometer = log.EndOdometer + where + log.VehicleId == vehicleId && + !(existingDate == date + || existingOdometer == odometer + || existingDate < date && existingOdometer < odometer + || existingDate > date && existingOdometer > odometer) + orderby existingOdometer descending + select log; + + return conflictingLogsQuery.FirstOrDefault(); + } + + #endregion + + #region Employee Name + + public string GetEmployeeNameCorrected(string term) + { + var names = GetEmployeeNames().ToList(); + return (from potentialName in names + let potentialNameClean = Regex.Replace(potentialName, @"\s*\(.*\)", "").ToLower() + let name = term.ToLower() + let similarity = Algorithms.Similarity(potentialNameClean, name) + where similarity > .7 || potentialNameClean.StartsWith(name) + orderby similarity descending + select potentialName).FirstOrDefault(); + } + + public IEnumerable GetEmployeeNamesAutocomplete(string term) + { + var termLower = term.ToLower(); + return from name in GetEmployeeNames() + let nameLower = name.ToLower() + where nameLower.StartsWith(termLower) || Algorithms.Similarity(nameLower, termLower) > .8 + select name; + } + + public IEnumerable GetEmployeeNames() + { + var names = _db.Vehicles.Select(v => v.Assigned).Where(n => !String.IsNullOrEmpty(n) && n != "to be sold"); + var logNames = + (from l in _db.Logs + select l.EmployeeName); + return names.Union(logNames).Distinct(); + } + + #endregion + + #region City + + public string GetCitiesCorrected(string term) + { + var termLower = term.ToLower(); + return (from city in GetCities().ToList() + let cityToLower = city.Name.ToLower() + let similarity = Algorithms.Similarity(cityToLower, termLower) + where city.Name.StartsWith(term) || Algorithms.Similarity(cityToLower, termLower) > .8 + select city.Name).FirstOrDefault(); + } + + public IEnumerable GetCitiesAutocomplete(string term) + { + return + from city in GetCities() + where city.Name.StartsWith(term) + select city.Name; + } + + private IQueryable GetCities() + { + return _db.Cities; + } + + #endregion + + public void Dispose() + { + _db.Dispose(); + } + } +} \ No newline at end of file diff --git a/Web/DAL/MileageTrakerInitializer.cs b/Web/DAL/MileageTrakerInitializer.cs new file mode 100644 index 0000000..f2065e7 --- /dev/null +++ b/Web/DAL/MileageTrakerInitializer.cs @@ -0,0 +1,97 @@ +using System; +using System.Data.Entity; +using System.IO; +using System.Linq; +using System.Web; +using MileageTraker.Web.Models; + +namespace MileageTraker.Web.DAL +{ + public class MileageTrakerInitializer : +#if DEBUG + DropCreateDatabaseIfModelChanges +#else + CreateDatabaseIfNotExists +#endif + { + private const string CreateIndex = "CREATE NONCLUSTERED INDEX [IDX_{1}] ON [{0}] ([{1}])"; + + protected override void Seed(MileageTrakerContext context) + { + Action createIndex = + (table, column) => context.Database.ExecuteSqlCommand(string.Format(CreateIndex, table, column)); + + createIndex("Log", "VehicleId"); + createIndex("Log", "EndOdometer"); + //createIndex("Log", "EmployeeName"); + //createIndex("Log", "CityName"); + createIndex("Log", "Date"); + createIndex("Log", "Created"); + //createIndex("Vehicle", "Assigned"); + + var folder = HttpContext.Current.Server.MapPath("~/App_Data"); + var vehicles = VehicleImporter.Import(Path.Combine(folder, "2011ETHRAvehicles.xls")); + foreach (var vehicle in vehicles) + { + context.Vehicles.Add(vehicle); + } + + var cities = VehicleImporter.ImportCities(Path.Combine(folder, "Cities.xls")); + foreach (var city in cities) + { + context.Cities.Add(city); + } + + var random = new Random(10); + foreach (var vehicle in vehicles.Where(v => v.Assigned != null)) + { + var odom = 1000 + random.Next(20000); + var purDateSplit = vehicle.PurDate.Split('/'); + var date = new DateTime(int.Parse("20" + purDateSplit[1]), int.Parse(purDateSplit[0]), 1); + var commonLogType = random.Next(1)%2 == 0 ? MileageLogType.NonCommuting : MileageLogType.Commuting; + var commonCity = cities.OrderBy(c => Guid.NewGuid()).First(); + + while (date < DateTime.Today) + { + var gas = random.Next(4)%4 == 0 ? Math.Round(random.NextDouble()*15, 3) : 0; + + var logType = commonLogType; + if (gas > 0 && random.Next(3) % 3 == 0) + logType = MileageLogType.GasPurchase; + else if (random.Next(6) % 6 == 0) + logType = commonLogType == MileageLogType.NonCommuting ? MileageLogType.Commuting : MileageLogType.NonCommuting; + + var driver = vehicle.Assigned; + if (random.Next(10)%10 == 0) + driver = vehicles.Where(v => v.Assigned != null).OrderBy(x => Guid.NewGuid()).First().Assigned; + + var city = commonCity; + if (random.Next(10)%10 == 0) + city = cities.OrderBy(c => Guid.NewGuid()).First(); + + var log = new Log + { + CityName = city.Name, + Date = date, + EmployeeName = driver, + EndOdometer = odom, + GasPurchased = gas, + LogType = logType, + VehicleId = vehicle.VehicleId, + Source = "Autogenerated", + UserAgent = "IE", + UserHostAddress = "127.0.0.1", + Created = date + }; + context.Logs.Add(log); + + date += new TimeSpan(random.Next(15), 0, 0, 0); + if (random.Next(10) % 10 == 0) + date += new TimeSpan(random.Next(360) + 90, 0, 0, 0); + odom += random.Next(25) + 25; + } + } + context.SaveChanges(); + } + } +} \ No newline at end of file diff --git a/Web/DAL/VehicleImporter.cs b/Web/DAL/VehicleImporter.cs new file mode 100644 index 0000000..78d03e2 --- /dev/null +++ b/Web/DAL/VehicleImporter.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using ExcelLibrary.SpreadSheet; +using MileageTraker.Web.Models; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web.DAL +{ + public static class VehicleImporter + { + private const string WorksheetName = "Vehicles"; + private const string WorksheetTitle = "EAST TENNESSEE HUMAN RESOURCE AGENCY"; + + public static void Export(IEnumerable vehicles, string filename) + { + ExcelWriter.WriteXls(vehicles, filename, WorksheetTitle, WorksheetName); + } + + public static void Export(IEnumerable vehicles, Stream stream) + { + ExcelWriter.WriteXls(vehicles, stream, WorksheetTitle, WorksheetName); + } + + public static byte[] Export(IEnumerable vehicles) + { + return ExcelWriter.WriteXls(vehicles, WorksheetTitle, WorksheetName); + } + + public static IEnumerable ImportCities(string filename) + { + var fileInfo = new FileInfo(filename); + return ImportCities(Workbook.Load(fileInfo.FullName)); + } + + private static IEnumerable ImportCities(Workbook workbook) + { + var sheet = workbook.Worksheets[0]; + + for (var r = sheet.Cells.FirstRowIndex + 1; r <= sheet.Cells.LastRowIndex; r++) + { + var row = sheet.Cells.GetRow(r); + + var city = new City + { + County = row.GetCell(0).StringValue.Trim(), + Name = row.GetCell(1).StringValue.Trim() + }; + + yield return city; + } + } + + public static IEnumerable Import(string filename) + { + var fileInfo = new FileInfo(filename); + return Import(Workbook.Load(fileInfo.FullName)); + } + + private static IEnumerable Import(Workbook workbook) + { + var sheet = workbook.Worksheets[0]; + var first = true; + for (var r = sheet.Cells.FirstRowIndex; r <= sheet.Cells.LastRowIndex; r++) + { + var row = sheet.Cells.GetRow(r); + if (row.LastColIndex != 11) + continue; + if (first) + { + first = false; + continue; + } + + var vehicle = new Vehicle(); + int key; + if (!int.TryParse(row.GetCell(0).StringValue.Trim(), out key)) + continue; // WARN + + vehicle.Key = key; + vehicle.VehicleId = row.GetCell(1).StringValue.Trim(); + vehicle.ModelYear = row.GetCell(2).StringValue.Trim(); + + var makeModel = row.GetCell(3).StringValue.Trim(); + const string pattern = @"(\w+)\s+(.+)"; + var make = Regex.Replace(makeModel, pattern, "$1"); + var model = Regex.Replace(makeModel, pattern, "$2"); + vehicle.Make = make; + vehicle.CarModel = model; + + vehicle.Color = row.GetCell(4).StringValue.Trim(); + if (vehicle.Color == "0") + vehicle.Color = "Unknown"; + vehicle.Type = row.GetCell(5).StringValue.Trim(); + vehicle.Vin = row.GetCell(6).StringValue.Trim().Replace('O','0').Substring(0,17); + vehicle.Price = decimal.Parse(row.GetCell(7).StringValue.Trim()); + vehicle.PurDate = row.GetCell(8).StringValue.Trim(); + vehicle.TagNumber = row.GetCell(9).StringValue.Trim(); + vehicle.Prog = row.GetCell(10).StringValue.Trim(); + vehicle.Assigned = row.GetCell(11).StringValue.Trim(); + vehicle.Assigned = Regex.Replace(vehicle.Assigned, @"(\w+),\s*(\w+)", "$2 $1"); + var match = Regex.Match(vehicle.Assigned, @"\s*\((?.*)\)\s*"); + if (match.Success) + { + vehicle.Notes = match.Groups["Notes"].Value; + vehicle.Assigned = Regex.Replace(vehicle.Assigned, @"\s*\(.*\)\s*", " ").Trim(); + } + if (vehicle.Assigned == "Unassigned") + vehicle.Assigned = null; + + yield return vehicle; + } + } + } +} \ No newline at end of file diff --git a/Web/Global.asax b/Web/Global.asax new file mode 100644 index 0000000..fc93055 --- /dev/null +++ b/Web/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="MileageTraker.Web.MvcApplication" Language="C#" %> diff --git a/Web/Global.asax.cs b/Web/Global.asax.cs new file mode 100644 index 0000000..0b76488 --- /dev/null +++ b/Web/Global.asax.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Data.Entity; +using System.Linq; +using System.Web.Mvc; +using System.Web.Routing; +using AutoMapper; +using MileageTraker.Web.DAL; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web +{ + public class MvcApplication : System.Web.HttpApplication + { + public static void RegisterGlobalFilters(GlobalFilterCollection filters) + { + filters.Add(new HandleErrorAttribute()); + } + + public static void RegisterRoutes(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + + //routes.MapRoute( + // "Export Vehicles", + // "ETHRAVehicles{year}-{month}-{day}.xls", + // new { controller = "Vehicle", action = "Export" } + // ); + + routes.MapRoute( + "Default", // Route name + "{controller}/{action}/{id}", // URL with parameters + new { controller = "CreateLog", action = "Index", id = UrlParameter.Optional } // Parameter defaults + ); + } + + protected void Application_Start() + { + Mapper.CreateMap().ConvertUsing(new DateTimeTypeConverter()); + + AreaRegistration.RegisterAllAreas(); + + RegisterGlobalFilters(GlobalFilters.Filters); + RegisterRoutes(RouteTable.Routes); + + Database.SetInitializer(new MileageTrakerInitializer()); + + ModelMetadataProviders.Current = new CustomMetadataProvider(); + } + } + + public class CustomMetadataProvider : DataAnnotationsModelMetadataProvider + { + protected override ModelMetadata CreateMetadata(IEnumerable attributes, Type containerType, Func modelAccessor, Type modelType, string propertyName) + { + var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); + + if (propertyName == null) + return metadata; + + if (metadata.DisplayName == null) + metadata.DisplayName = propertyName.Wordify(); + + var formatHint = attributes.OfType().FirstOrDefault(); + metadata.AdditionalValues.Add("FormatHint", formatHint != null ? formatHint.Text : (string)null); + + var unitsAttribute = attributes.OfType().FirstOrDefault(); + metadata.AdditionalValues.Add("Units", unitsAttribute != null ? unitsAttribute.Text : (string)null); + + var editLabelAttribute = attributes.OfType().FirstOrDefault(); + metadata.AdditionalValues.Add("EditLabel", editLabelAttribute == null); + + return metadata; + } + } +} \ No newline at end of file diff --git a/Web/Logs/MileageTraker.log b/Web/Logs/MileageTraker.log new file mode 100644 index 0000000..cdbfb99 --- /dev/null +++ b/Web/Logs/MileageTraker.log @@ -0,0 +1,35 @@ +2012-12-01 08:55:00,035 [5] ERROR LogController.Index - +System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The SELECT permission was denied on the object 'Log', database 'MileageTraker', schema 'dbo'. + at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) + at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() + at System.Data.SqlClient.SqlDataReader.get_MetaData() + at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) + at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) + at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) + at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) + at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + --- End of inner exception stack trace --- + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) + at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) + at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) + at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.1 b/Web/Logs/MileageTraker.log.1 new file mode 100644 index 0000000..970ed40 --- /dev/null +++ b/Web/Logs/MileageTraker.log.1 @@ -0,0 +1,35 @@ +2012-12-01 08:54:10,587 [5] ERROR LogController.Index - +System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The SELECT permission was denied on the object 'Log', database 'MileageTraker', schema 'dbo'. + at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) + at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() + at System.Data.SqlClient.SqlDataReader.get_MetaData() + at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) + at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) + at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) + at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) + at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + --- End of inner exception stack trace --- + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) + at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) + at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) + at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2011-09-03 b/Web/Logs/MileageTraker.log.2011-09-03 new file mode 100644 index 0000000..01fa0c9 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2011-09-03 @@ -0,0 +1,5 @@ +2011-09-03 12:11:02,978 [8] INFO LogController.Create - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:12:00,729 [4] INFO LogController.Create - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:12:33,668 [14] INFO LogController.Create - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:13:44,736 [14] INFO LogController.Edit - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:14:11,073 [16] INFO LogController.Edit - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log diff --git a/Web/Logs/MileageTraker.log.2011-09-12 b/Web/Logs/MileageTraker.log.2011-09-12 new file mode 100644 index 0000000..912346b --- /dev/null +++ b/Web/Logs/MileageTraker.log.2011-09-12 @@ -0,0 +1,60 @@ +2011-09-12 19:45:10,275 [22] ERROR CreateLogController.Index - +System.Web.HttpParseException (0x80004005): The using block is missing a closing "}" character. Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup. + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Compilation.BuildManager.GetObjectFactory(String virtualPath, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2011-09-12 19:49:04,301 [23] ERROR CreateLogController.Index - +System.Web.HttpParseException (0x80004005): Unexpected "if" keyword after "@" character. Once inside code, you do not need to prefix constructs like "if" with "@". + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Compilation.BuildManager.GetObjectFactory(String virtualPath, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2011-09-12 19:50:23,506 [27] INFO CreateLogController.Action - UserHostAddress: 127.0.0.1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2011-09-12 19:51:41,962 [24] INFO CreateLogController.Action - UserHostAddress: 127.0.0.1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2011-09-12.1 b/Web/Logs/MileageTraker.log.2011-09-12.1 new file mode 100644 index 0000000..3f6be31 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2011-09-12.1 @@ -0,0 +1 @@ +2011-09-12 19:37:02,942 [7] INFO CreateLogController.Action - UserHostAddress: 127.0.0.1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-04-18 b/Web/Logs/MileageTraker.log.2012-04-18 new file mode 100644 index 0000000..a0f29a5 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18 @@ -0,0 +1,22 @@ +2012-04-18 15:34:45,582 [48] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 15:35:52,818 [48] ERROR CreateLogController.Confirm - +System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. + at System.Data.Entity.Internal.InternalContext.SaveChanges() + at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() + at System.Data.Entity.DbContext.SaveChanges() + at MileageTraker.Web.DAL.DataService.AddLog(Log log) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 23 + at MileageTraker.Web.Controllers.CreateLogController.Confirm(CreateLogViewModel model) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\CreateLogController.cs:line 63 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2012-04-18 15:36:40,307 [44] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 15:36:50,346 [44] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 15:36:52,150 [52] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-04-18.1 b/Web/Logs/MileageTraker.log.2012-04-18.1 new file mode 100644 index 0000000..3089f61 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18.1 @@ -0,0 +1,3 @@ +2012-04-18 14:52:27,891 [13] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 14:58:39,371 [21] INFO LogController.Export - UserHostAddress: ::1, query: MileageTraker.Web.ViewModels.LogQueryViewModel +2012-04-18 15:03:20,162 [28] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-04-18.2 b/Web/Logs/MileageTraker.log.2012-04-18.2 new file mode 100644 index 0000000..8bd88e8 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18.2 @@ -0,0 +1,28 @@ +2012-04-18 14:41:39,305 [10] ERROR LogController.Index - +System.InvalidOperationException: The model backing the 'MileageTrakerContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). + at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) + at System.Data.Entity.Database.<>c__DisplayClass2`1.b__0(DbContext c) + at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.b__6() + at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) + at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() + at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) + at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 19 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-04-18.3 b/Web/Logs/MileageTraker.log.2012-04-18.3 new file mode 100644 index 0000000..a8c86bd --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18.3 @@ -0,0 +1,56 @@ +2012-04-18 14:16:06,542 [6] ERROR LogController.Index - +System.InvalidOperationException: The model backing the 'MileageTrakerContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). + at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) + at System.Data.Entity.Database.<>c__DisplayClass2`1.b__0(DbContext c) + at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.b__6() + at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) + at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() + at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) + at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 19 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2012-04-18 14:30:43,757 [5] ERROR LogController.Index - +System.InvalidOperationException: The model backing the 'MileageTrakerContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). + at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) + at System.Data.Entity.Database.<>c__DisplayClass2`1.b__0(DbContext c) + at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.b__6() + at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) + at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() + at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) + at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 19 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-04-23 b/Web/Logs/MileageTraker.log.2012-04-23 new file mode 100644 index 0000000..48720ae --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-23 @@ -0,0 +1,56 @@ +2012-04-23 20:15:29,669 [35] ERROR CreateLogController.RecentLogs - +System.Web.HttpParseException (0x80004005): Only one 'model' statement is allowed in a file. + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2012-04-23 20:15:38,680 [35] ERROR CreateLogController.RecentLogs - +System.Web.HttpParseException (0x80004005): Only one 'model' statement is allowed in a file. + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-05-26 b/Web/Logs/MileageTraker.log.2012-05-26 new file mode 100644 index 0000000..ef688c3 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-05-26 @@ -0,0 +1 @@ +2012-05-26 13:50:31,388 [21] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-06-12 b/Web/Logs/MileageTraker.log.2012-06-12 new file mode 100644 index 0000000..e0ea88a --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-06-12 @@ -0,0 +1,31 @@ +2012-06-12 19:18:40,050 [10] ERROR LogController.MonthlyVehicleMileage - +System.NullReferenceException: Object reference not set to an instance of an object. + at ASP._Page_Views_Log_LogsSummary_cshtml.b__0(Tuple`2 log) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Views\Log\LogsSummary.cshtml:line 43 + at System.Linq.Enumerable.<>c__DisplayClass12`3.b__11(TSource x) + at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext() + at System.Linq.Enumerable.Sum(IEnumerable`1 source) + at System.Linq.Enumerable.Sum[TSource](IEnumerable`1 source, Func`2 selector) + at ASP._Page_Views_Log_LogsSummary_cshtml.Execute() in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\05d80320\b40ebf6d\App_Web_yqhuw3pv.0.cs:line 0 + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() + at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) + at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) + at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) + at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection) + at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) + at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model) + at ASP._Page_Views_Log_MonthlyVehicleMileage_cshtml.Execute() in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Views\Log\MonthlyVehicleMileage.cshtml:line 47 + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() + at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() + at System.Web.WebPages.StartPage.RunPage() + at System.Web.WebPages.StartPage.ExecutePageHierarchy() + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) + at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) + at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-06-12.1 b/Web/Logs/MileageTraker.log.2012-06-12.1 new file mode 100644 index 0000000..58f1608 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-06-12.1 @@ -0,0 +1,2 @@ +2012-06-12 18:13:44,281 [15] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-06-12 18:15:08,190 [24] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-11-27 b/Web/Logs/MileageTraker.log.2012-11-27 new file mode 100644 index 0000000..aa80d93 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-11-27 @@ -0,0 +1,52 @@ +2012-11-27 12:41:28,332 [5] ERROR LogController.Index - +System.Data.ProviderIncompatibleException: An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct. ---> System.Data.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException: Login failed for user 'MileageTrakerUser'. + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) + at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) + at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) + at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) + at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) + at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) + at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) + at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) + at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) + at System.Data.SqlClient.SqlConnection.Open() + at System.Data.SqlClient.SqlProviderServices.UsingConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.UsingMasterConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection) + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) + at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) + at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) + at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in c:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-11-27.1 b/Web/Logs/MileageTraker.log.2012-11-27.1 new file mode 100644 index 0000000..a43149a --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-11-27.1 @@ -0,0 +1,51 @@ +2012-11-27 12:40:34,412 [5] ERROR LogController.Index - +System.Data.ProviderIncompatibleException: An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct. ---> System.Data.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception: The network path was not found + --- End of inner exception stack trace --- + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) + at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) + at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) + at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) + at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) + at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) + at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) + at System.Data.SqlClient.SqlConnection.Open() + at System.Data.SqlClient.SqlProviderServices.UsingConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.UsingMasterConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection) + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) + at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) + at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) + at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in c:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Migrations/201204181847082_InitialMigration.Designer.cs b/Web/Migrations/201204181847082_InitialMigration.Designer.cs new file mode 100644 index 0000000..fdcf919 --- /dev/null +++ b/Web/Migrations/201204181847082_InitialMigration.Designer.cs @@ -0,0 +1,24 @@ +// +namespace MileageTraker.Web.Migrations +{ + using System.Data.Entity.Migrations; + using System.Data.Entity.Migrations.Infrastructure; + + public sealed partial class InitialMigration : IMigrationMetadata + { + string IMigrationMetadata.Id + { + get { return "201204181847082_InitialMigration"; } + } + + string IMigrationMetadata.Source + { + get { return null; } + } + + string IMigrationMetadata.Target + { + get { return "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"; } + } + } +} diff --git a/Web/Migrations/201204181847082_InitialMigration.cs b/Web/Migrations/201204181847082_InitialMigration.cs new file mode 100644 index 0000000..6e55f69 --- /dev/null +++ b/Web/Migrations/201204181847082_InitialMigration.cs @@ -0,0 +1,17 @@ +namespace MileageTraker.Web.Migrations +{ + using System.Data.Entity.Migrations; + + public partial class InitialMigration : DbMigration + { + public override void Up() + { + } + + public override void Down() + { + } + } +} + +// Update-Database -Script -SourceMigration:$InitialDatabase -TargetMigration:"InitialMigration" \ No newline at end of file diff --git a/Web/Migrations/Configuration.cs b/Web/Migrations/Configuration.cs new file mode 100644 index 0000000..bc9323b --- /dev/null +++ b/Web/Migrations/Configuration.cs @@ -0,0 +1,31 @@ +namespace MileageTraker.Web.Migrations +{ + using System; + using System.Data.Entity; + using System.Data.Entity.Migrations; + using System.Linq; + + internal sealed class Configuration : DbMigrationsConfiguration + { + public Configuration() + { + AutomaticMigrationsEnabled = true; + } + + protected override void Seed(MileageTraker.Web.Models.MileageTrakerContext context) + { + // This method will be called after migrating to the latest version. + + // You can use the DbSet.AddOrUpdate() helper extension method + // to avoid creating duplicate seed data. E.g. + // + // context.People.AddOrUpdate( + // p => p.FullName, + // new Person { FullName = "Andrew Peters" }, + // new Person { FullName = "Brice Lambson" }, + // new Person { FullName = "Rowan Miller" } + // ); + // + } + } +} diff --git a/Web/MileageTraker.log b/Web/MileageTraker.log new file mode 100644 index 0000000..e8329eb --- /dev/null +++ b/Web/MileageTraker.log @@ -0,0 +1,12 @@ +2011-06-14 14:05:44,378 [16] ERROR Index - +System.Exception: test + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 17 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Models/City.cs b/Web/Models/City.cs new file mode 100644 index 0000000..a54810c --- /dev/null +++ b/Web/Models/City.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace MileageTraker.Web.Models +{ + public class City + { + [Key] + public int CityId { get; set; } + public string Name { get; set; } + public string County { get; set; } + } +} \ No newline at end of file diff --git a/Web/Models/Log.cs b/Web/Models/Log.cs new file mode 100644 index 0000000..3412fed --- /dev/null +++ b/Web/Models/Log.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; +using MileageTraker.Web.DAL; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web.Models +{ + public class Log : IValidatableObject + { + [Key] + [HiddenInput(DisplayValue = false)] + public int LogId { get; set; } + + [Required] + [Remote("Exists", "Vehicle", ErrorMessage = "ID not found")] + [StringLength(6, MinimumLength = 4, ErrorMessage = "Enter 4 digit number")] + [Display(Name = "Vehicle ID")] + [RegularExpression(@"\d+", ErrorMessage = "Enter only numbers")] + public string VehicleId { get; set; } + + [Required] + [Range(1, 500000, ErrorMessage = "Between 1 and 500k")] + [Display(Name = "End Odometer")] + [Units("Miles")] + public int EndOdometer { get; set; } + + [Required] + [Display(Name = "Type")] + [NoEditLabel] + public MileageLogTypeWrapper LogType { get; set; } + + [Required] + [StringLength(64, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")] + public string CityName { get; set; } + + [Required] + [Display(Name = "Employee / Driver")] + [RegularExpression(@"[A-Za-z().]+(\s+[A-Za-z().]+)+", ErrorMessage = "Need complete name")] + public string EmployeeName { get; set; } + + [Range(0, 50)] + [DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)] + [Units("Gallons")] + [FormatHint("n.nnnn")] + public double GasPurchased { get; set; } + + [Required] + [DataType(DataType.Date)] + [DisplayFormat(DataFormatString = @"{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] + [DenyFutureDate(ErrorMessage = "Future date")] + [FormatHint("mm/dd/yyyy")] + public DateTime Date { get; set; } + + [Display(Name = "Time Created")] + [DisplayFormat(DataFormatString = @"{0:MM/dd/yyyy h:mm tt}")] + [HiddenInput] + public DateTime Created { get; set; } + + /// + /// url route that was used to create this instance, ie 'CreateLog\Confirm' or 'Logs\Create' + /// + [HiddenInput] + public string Source { get; set; } + + [HiddenInput] + public string UserHostAddress { get; set; } + + [HiddenInput] + public string UserAgent { get; set; } + + public Log() + { + LogType = new MileageLogTypeWrapper(); + } + + public IEnumerable Validate(ValidationContext validationContext) + { + if (LogType == MileageLogType.GasPurchase && (GasPurchased.Equals(0))) + yield return new ValidationResult("Enter amount of gas purchased", new[] { "GasPurchased" }); + + if (LogType.Value == 0) + yield return new ValidationResult("Required", new[] { "LogType" }); + + ValidationResult result = null; + try + { + var dataService = new DataService(); + dataService.ValidateOdometerChronology(VehicleId, EndOdometer, Date); + } + catch (ChronologicalOrderException ex) + { + result = new ValidationResult(ex.Message, new[] { "EndOdometer" }); + } + if (result != null) + yield return result; + } + } +} \ No newline at end of file diff --git a/Web/Models/MileageLogType.cs b/Web/Models/MileageLogType.cs new file mode 100644 index 0000000..3b12c85 --- /dev/null +++ b/Web/Models/MileageLogType.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; + +namespace MileageTraker.Web.Models +{ + public enum MileageLogType + { + [Display(Name = "Non-Commuting",ShortName = "Non-Comm")] + NonCommuting = 1, + [Display(Name = "Commuting", ShortName = "Comm")] + Commuting = 2, + [Display(Name = "Gas Purchase", ShortName = "Gas")] + GasPurchase = 3 + } + + [ComplexType] + public class MileageLogTypeWrapper + { + [NotMapped] + public MileageLogType Enum { get; set; } + + public int Value + { + get { return (int)Enum; } + set { Enum = (MileageLogType)value; } + } + + public static implicit operator MileageLogType(MileageLogTypeWrapper w) + { + return w == null ? default(MileageLogType) : w.Enum; + } + + public static implicit operator MileageLogTypeWrapper(MileageLogType c) + { + return new MileageLogTypeWrapper { Enum = c }; + } + } +} \ No newline at end of file diff --git a/Web/Models/MileageTrakerContext.cs b/Web/Models/MileageTrakerContext.cs new file mode 100644 index 0000000..994f121 --- /dev/null +++ b/Web/Models/MileageTrakerContext.cs @@ -0,0 +1,17 @@ +using System.Data.Entity; +using System.Data.Entity.ModelConfiguration.Conventions; + +namespace MileageTraker.Web.Models +{ + public class MileageTrakerContext : DbContext + { + public DbSet Logs { get; set; } + public DbSet Vehicles { get; set; } + public DbSet Cities { get; set; } + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { + modelBuilder.Conventions.Remove(); + } + } +} \ No newline at end of file diff --git a/Web/Models/Vehicle.cs b/Web/Models/Vehicle.cs new file mode 100644 index 0000000..603bafd --- /dev/null +++ b/Web/Models/Vehicle.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web.Models +{ + public class Vehicle + { + [Required] + public int Key { get; set; } + + [Key] + [Required] + [StringLength(6, MinimumLength = 4, ErrorMessage = "Must be at least a 4 digit number")] + [Display(Name = "EHTRA ID")] + [RegularExpression(@"\d+", ErrorMessage = "Vehicle ID must be all numbers")] + public string VehicleId { get; set; } + + [Required] + [RegularExpression(@"\d{4}", ErrorMessage = "Must be 4 numbers")] + public string ModelYear { get; set; } + + [Required] + public string Make { get; set; } + + [Display(Name = "Model")] + [Required] + public string CarModel { get; set; } + + public string Color { get; set; } + + [Required] + [RegularExpression(@"Car|Truck|SUV|Van", ErrorMessage = "Must be Car, Truck, SUV, or Van")] + [FormatHint("Car, Truck, SUV or Van")] + public string Type { get; set; } + + [Required] + [Display(Name = "VIN")] + [RegularExpression(@"[0-9A-HJ-NPR-Z]{17}", ErrorMessage = "VIN must be 17-characters, not including letters I, O or Q")] + public string Vin { get; set; } + + [Required] + public decimal Price { get; set; } + + [Required] + [RegularExpression(@"\d{1,2}/\d{2}", ErrorMessage = "PurDate must be in mm/yy format")] + public string PurDate { get; set; } + + [Required] + [Display(Name = "Tag#")] + public string TagNumber { get; set; } + + [Required] + public string Prog { get; set; } + + [RegularExpression(@"Unassigned|[A-Za-z().]+(\s+[A-Za-z().]+)+", ErrorMessage = "Please enter the full name")] + [DisplayFormat(NullDisplayText = "Unassigned")] + public string Assigned { get; set; } + + public string Notes { get; set; } + + [Display(Name = "Current Odometer", ShortName= "ODO")] + [DisplayFormat(NullDisplayText = "?")] + public int? CurrentOdometer { get; set; } + + public virtual ICollection Logs { get; set; } + } +} \ No newline at end of file diff --git a/Web/Properties/AssemblyInfo.cs b/Web/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c6aa7d4 --- /dev/null +++ b/Web/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MileageTraker")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("MileageTraker")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("981b04e1-33bb-4cc1-841b-378d67ee0830")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: log4net.Config.XmlConfigurator(Watch = true)] \ No newline at end of file diff --git a/Web/README.jQuery.vsdoc.txt b/Web/README.jQuery.vsdoc.txt new file mode 100644 index 0000000..18458d0 --- /dev/null +++ b/Web/README.jQuery.vsdoc.txt @@ -0,0 +1 @@ +vsdoc files for Visual Studio IntelliSense are now included in the core jquery NuGet package. As a result, this pacakge is obsolete and will not be updated past version 1.6. You can uninstall it. \ No newline at end of file diff --git a/Web/Scripts/MicrosoftAjax.debug.js b/Web/Scripts/MicrosoftAjax.debug.js new file mode 100644 index 0000000..a5f7942 --- /dev/null +++ b/Web/Scripts/MicrosoftAjax.debug.js @@ -0,0 +1,7117 @@ +// Name: MicrosoftAjax.debug.js +// Assembly: System.Web.Extensions +// Version: 4.0.0.0 +// FileVersion: 4.0.20526.0 +//----------------------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------- +// MicrosoftAjax.js +// Microsoft AJAX Framework. + +Function.__typeName = 'Function'; +Function.__class = true; +Function.createCallback = function Function$createCallback(method, context) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "method", type: Function}, + {name: "context", mayBeNull: true} + ]); + if (e) throw e; + return function() { + var l = arguments.length; + if (l > 0) { + var args = []; + for (var i = 0; i < l; i++) { + args[i] = arguments[i]; + } + args[l] = context; + return method.apply(this, args); + } + return method.call(this, context); + } +} +Function.createDelegate = function Function$createDelegate(instance, method) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance", mayBeNull: true}, + {name: "method", type: Function} + ]); + if (e) throw e; + return function() { + return method.apply(instance, arguments); + } +} +Function.emptyFunction = Function.emptyMethod = function Function$emptyMethod() { + /// +} +Function.validateParameters = function Function$validateParameters(parameters, expectedParameters, validateParameterCount) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "parameters"}, + {name: "expectedParameters"}, + {name: "validateParameterCount", type: Boolean, optional: true} + ]); + if (e) throw e; + return Function._validateParams(parameters, expectedParameters, validateParameterCount); +} +Function._validateParams = function Function$_validateParams(params, expectedParams, validateParameterCount) { + var e, expectedLength = expectedParams.length; + validateParameterCount = validateParameterCount || (typeof(validateParameterCount) === "undefined"); + e = Function._validateParameterCount(params, expectedParams, validateParameterCount); + if (e) { + e.popStackFrame(); + return e; + } + for (var i = 0, l = params.length; i < l; i++) { + var expectedParam = expectedParams[Math.min(i, expectedLength - 1)], + paramName = expectedParam.name; + if (expectedParam.parameterArray) { + paramName += "[" + (i - expectedLength + 1) + "]"; + } + else if (!validateParameterCount && (i >= expectedLength)) { + break; + } + e = Function._validateParameter(params[i], expectedParam, paramName); + if (e) { + e.popStackFrame(); + return e; + } + } + return null; +} +Function._validateParameterCount = function Function$_validateParameterCount(params, expectedParams, validateParameterCount) { + var i, error, + expectedLen = expectedParams.length, + actualLen = params.length; + if (actualLen < expectedLen) { + var minParams = expectedLen; + for (i = 0; i < expectedLen; i++) { + var param = expectedParams[i]; + if (param.optional || param.parameterArray) { + minParams--; + } + } + if (actualLen < minParams) { + error = true; + } + } + else if (validateParameterCount && (actualLen > expectedLen)) { + error = true; + for (i = 0; i < expectedLen; i++) { + if (expectedParams[i].parameterArray) { + error = false; + break; + } + } + } + if (error) { + var e = Error.parameterCount(); + e.popStackFrame(); + return e; + } + return null; +} +Function._validateParameter = function Function$_validateParameter(param, expectedParam, paramName) { + var e, + expectedType = expectedParam.type, + expectedInteger = !!expectedParam.integer, + expectedDomElement = !!expectedParam.domElement, + mayBeNull = !!expectedParam.mayBeNull; + e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName); + if (e) { + e.popStackFrame(); + return e; + } + var expectedElementType = expectedParam.elementType, + elementMayBeNull = !!expectedParam.elementMayBeNull; + if (expectedType === Array && typeof(param) !== "undefined" && param !== null && + (expectedElementType || !elementMayBeNull)) { + var expectedElementInteger = !!expectedParam.elementInteger, + expectedElementDomElement = !!expectedParam.elementDomElement; + for (var i=0; i < param.length; i++) { + var elem = param[i]; + e = Function._validateParameterType(elem, expectedElementType, + expectedElementInteger, expectedElementDomElement, elementMayBeNull, + paramName + "[" + i + "]"); + if (e) { + e.popStackFrame(); + return e; + } + } + } + return null; +} +Function._validateParameterType = function Function$_validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) { + var e, i; + if (typeof(param) === "undefined") { + if (mayBeNull) { + return null; + } + else { + e = Error.argumentUndefined(paramName); + e.popStackFrame(); + return e; + } + } + if (param === null) { + if (mayBeNull) { + return null; + } + else { + e = Error.argumentNull(paramName); + e.popStackFrame(); + return e; + } + } + if (expectedType && expectedType.__enum) { + if (typeof(param) !== 'number') { + e = Error.argumentType(paramName, Object.getType(param), expectedType); + e.popStackFrame(); + return e; + } + if ((param % 1) === 0) { + var values = expectedType.prototype; + if (!expectedType.__flags || (param === 0)) { + for (i in values) { + if (values[i] === param) return null; + } + } + else { + var v = param; + for (i in values) { + var vali = values[i]; + if (vali === 0) continue; + if ((vali & param) === vali) { + v -= vali; + } + if (v === 0) return null; + } + } + } + e = Error.argumentOutOfRange(paramName, param, String.format(Sys.Res.enumInvalidValue, param, expectedType.getName())); + e.popStackFrame(); + return e; + } + if (expectedDomElement && (!Sys._isDomElement(param) || (param.nodeType === 3))) { + e = Error.argument(paramName, Sys.Res.argumentDomElement); + e.popStackFrame(); + return e; + } + if (expectedType && !Sys._isInstanceOfType(expectedType, param)) { + e = Error.argumentType(paramName, Object.getType(param), expectedType); + e.popStackFrame(); + return e; + } + if (expectedType === Number && expectedInteger) { + if ((param % 1) !== 0) { + e = Error.argumentOutOfRange(paramName, param, Sys.Res.argumentInteger); + e.popStackFrame(); + return e; + } + } + return null; +} + +Error.__typeName = 'Error'; +Error.__class = true; +Error.create = function Error$create(message, errorInfo) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true}, + {name: "errorInfo", mayBeNull: true, optional: true} + ]); + if (e) throw e; + var err = new Error(message); + err.message = message; + if (errorInfo) { + for (var v in errorInfo) { + err[v] = errorInfo[v]; + } + } + err.popStackFrame(); + return err; +} +Error.argument = function Error$argument(paramName, message) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentException: " + (message ? message : Sys.Res.argument); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName }); + err.popStackFrame(); + return err; +} +Error.argumentNull = function Error$argumentNull(paramName, message) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentNullException: " + (message ? message : Sys.Res.argumentNull); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName }); + err.popStackFrame(); + return err; +} +Error.argumentOutOfRange = function Error$argumentOutOfRange(paramName, actualValue, message) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "actualValue", mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : Sys.Res.argumentOutOfRange); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + if (typeof(actualValue) !== "undefined" && actualValue !== null) { + displayMessage += "\n" + String.format(Sys.Res.actualValue, actualValue); + } + var err = Error.create(displayMessage, { + name: "Sys.ArgumentOutOfRangeException", + paramName: paramName, + actualValue: actualValue + }); + err.popStackFrame(); + return err; +} +Error.argumentType = function Error$argumentType(paramName, actualType, expectedType, message) { + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "actualType", type: Type, mayBeNull: true, optional: true}, + {name: "expectedType", type: Type, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentTypeException: "; + if (message) { + displayMessage += message; + } + else if (actualType && expectedType) { + displayMessage += + String.format(Sys.Res.argumentTypeWithTypes, actualType.getName(), expectedType.getName()); + } + else { + displayMessage += Sys.Res.argumentType; + } + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { + name: "Sys.ArgumentTypeException", + paramName: paramName, + actualType: actualType, + expectedType: expectedType + }); + err.popStackFrame(); + return err; +} +Error.argumentUndefined = function Error$argumentUndefined(paramName, message) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : Sys.Res.argumentUndefined); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName }); + err.popStackFrame(); + return err; +} +Error.format = function Error$format(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.FormatException: " + (message ? message : Sys.Res.format); + var err = Error.create(displayMessage, {name: 'Sys.FormatException'}); + err.popStackFrame(); + return err; +} +Error.invalidOperation = function Error$invalidOperation(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.InvalidOperationException: " + (message ? message : Sys.Res.invalidOperation); + var err = Error.create(displayMessage, {name: 'Sys.InvalidOperationException'}); + err.popStackFrame(); + return err; +} +Error.notImplemented = function Error$notImplemented(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.NotImplementedException: " + (message ? message : Sys.Res.notImplemented); + var err = Error.create(displayMessage, {name: 'Sys.NotImplementedException'}); + err.popStackFrame(); + return err; +} +Error.parameterCount = function Error$parameterCount(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ParameterCountException: " + (message ? message : Sys.Res.parameterCount); + var err = Error.create(displayMessage, {name: 'Sys.ParameterCountException'}); + err.popStackFrame(); + return err; +} +Error.prototype.popStackFrame = function Error$popStackFrame() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (typeof(this.stack) === "undefined" || this.stack === null || + typeof(this.fileName) === "undefined" || this.fileName === null || + typeof(this.lineNumber) === "undefined" || this.lineNumber === null) { + return; + } + var stackFrames = this.stack.split("\n"); + var currentFrame = stackFrames[0]; + var pattern = this.fileName + ":" + this.lineNumber; + while(typeof(currentFrame) !== "undefined" && + currentFrame !== null && + currentFrame.indexOf(pattern) === -1) { + stackFrames.shift(); + currentFrame = stackFrames[0]; + } + var nextFrame = stackFrames[1]; + if (typeof(nextFrame) === "undefined" || nextFrame === null) { + return; + } + var nextFrameParts = nextFrame.match(/@(.*):(\d+)$/); + if (typeof(nextFrameParts) === "undefined" || nextFrameParts === null) { + return; + } + this.fileName = nextFrameParts[1]; + this.lineNumber = parseInt(nextFrameParts[2]); + stackFrames.shift(); + this.stack = stackFrames.join("\n"); +} + +Object.__typeName = 'Object'; +Object.__class = true; +Object.getType = function Object$getType(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"} + ]); + if (e) throw e; + var ctor = instance.constructor; + if (!ctor || (typeof(ctor) !== "function") || !ctor.__typeName || (ctor.__typeName === 'Object')) { + return Object; + } + return ctor; +} +Object.getTypeName = function Object$getTypeName(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"} + ]); + if (e) throw e; + return Object.getType(instance).getName(); +} + +String.__typeName = 'String'; +String.__class = true; +String.prototype.endsWith = function String$endsWith(suffix) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "suffix", type: String} + ]); + if (e) throw e; + return (this.substr(this.length - suffix.length) === suffix); +} +String.prototype.startsWith = function String$startsWith(prefix) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "prefix", type: String} + ]); + if (e) throw e; + return (this.substr(0, prefix.length) === prefix); +} +String.prototype.trim = function String$trim() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this.replace(/^\s+|\s+$/g, ''); +} +String.prototype.trimEnd = function String$trimEnd() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this.replace(/\s+$/, ''); +} +String.prototype.trimStart = function String$trimStart() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this.replace(/^\s+/, ''); +} +String.format = function String$format(format, args) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String}, + {name: "args", mayBeNull: true, parameterArray: true} + ]); + if (e) throw e; + return String._toFormattedString(false, arguments); +} +String._toFormattedString = function String$_toFormattedString(useLocale, args) { + var result = ''; + var format = args[0]; + for (var i=0;;) { + var open = format.indexOf('{', i); + var close = format.indexOf('}', i); + if ((open < 0) && (close < 0)) { + result += format.slice(i); + break; + } + if ((close > 0) && ((close < open) || (open < 0))) { + if (format.charAt(close + 1) !== '}') { + throw Error.argument('format', Sys.Res.stringFormatBraceMismatch); + } + result += format.slice(i, close + 1); + i = close + 2; + continue; + } + result += format.slice(i, open); + i = open + 1; + if (format.charAt(i) === '{') { + result += '{'; + i++; + continue; + } + if (close < 0) throw Error.argument('format', Sys.Res.stringFormatBraceMismatch); + var brace = format.substring(i, close); + var colonIndex = brace.indexOf(':'); + var argNumber = parseInt((colonIndex < 0)? brace : brace.substring(0, colonIndex), 10) + 1; + if (isNaN(argNumber)) throw Error.argument('format', Sys.Res.stringFormatInvalid); + var argFormat = (colonIndex < 0)? '' : brace.substring(colonIndex + 1); + var arg = args[argNumber]; + if (typeof(arg) === "undefined" || arg === null) { + arg = ''; + } + if (arg.toFormattedString) { + result += arg.toFormattedString(argFormat); + } + else if (useLocale && arg.localeFormat) { + result += arg.localeFormat(argFormat); + } + else if (arg.format) { + result += arg.format(argFormat); + } + else + result += arg.toString(); + i = close + 1; + } + return result; +} + +Boolean.__typeName = 'Boolean'; +Boolean.__class = true; +Boolean.parse = function Boolean$parse(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ], false); + if (e) throw e; + var v = value.trim().toLowerCase(); + if (v === 'false') return false; + if (v === 'true') return true; + throw Error.argumentOutOfRange('value', value, Sys.Res.boolTrueOrFalse); +} + +Date.__typeName = 'Date'; +Date.__class = true; + +Number.__typeName = 'Number'; +Number.__class = true; + +RegExp.__typeName = 'RegExp'; +RegExp.__class = true; + +if (!window) this.window = this; +window.Type = Function; +Type.__fullyQualifiedIdentifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]([^ \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*[^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\])?$", "i"); +Type.__identifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\][^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*$", "i"); +Type.prototype.callBaseMethod = function Type$callBaseMethod(instance, name, baseArguments) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"}, + {name: "name", type: String}, + {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true} + ]); + if (e) throw e; + var baseMethod = Sys._getBaseMethod(this, instance, name); + if (!baseMethod) throw Error.invalidOperation(String.format(Sys.Res.methodNotFound, name)); + if (!baseArguments) { + return baseMethod.apply(instance); + } + else { + return baseMethod.apply(instance, baseArguments); + } +} +Type.prototype.getBaseMethod = function Type$getBaseMethod(instance, name) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"}, + {name: "name", type: String} + ]); + if (e) throw e; + return Sys._getBaseMethod(this, instance, name); +} +Type.prototype.getBaseType = function Type$getBaseType() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return (typeof(this.__baseType) === "undefined") ? null : this.__baseType; +} +Type.prototype.getInterfaces = function Type$getInterfaces() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var result = []; + var type = this; + while(type) { + var interfaces = type.__interfaces; + if (interfaces) { + for (var i = 0, l = interfaces.length; i < l; i++) { + var interfaceType = interfaces[i]; + if (!Array.contains(result, interfaceType)) { + result[result.length] = interfaceType; + } + } + } + type = type.__baseType; + } + return result; +} +Type.prototype.getName = function Type$getName() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return (typeof(this.__typeName) === "undefined") ? "" : this.__typeName; +} +Type.prototype.implementsInterface = function Type$implementsInterface(interfaceType) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "interfaceType", type: Type} + ]); + if (e) throw e; + this.resolveInheritance(); + var interfaceName = interfaceType.getName(); + var cache = this.__interfaceCache; + if (cache) { + var cacheEntry = cache[interfaceName]; + if (typeof(cacheEntry) !== 'undefined') return cacheEntry; + } + else { + cache = this.__interfaceCache = {}; + } + var baseType = this; + while (baseType) { + var interfaces = baseType.__interfaces; + if (interfaces) { + if (Array.indexOf(interfaces, interfaceType) !== -1) { + return cache[interfaceName] = true; + } + } + baseType = baseType.__baseType; + } + return cache[interfaceName] = false; +} +Type.prototype.inheritsFrom = function Type$inheritsFrom(parentType) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "parentType", type: Type} + ]); + if (e) throw e; + this.resolveInheritance(); + var baseType = this.__baseType; + while (baseType) { + if (baseType === parentType) { + return true; + } + baseType = baseType.__baseType; + } + return false; +} +Type.prototype.initializeBase = function Type$initializeBase(instance, baseArguments) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"}, + {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true} + ]); + if (e) throw e; + if (!Sys._isInstanceOfType(this, instance)) throw Error.argumentType('instance', Object.getType(instance), this); + this.resolveInheritance(); + if (this.__baseType) { + if (!baseArguments) { + this.__baseType.apply(instance); + } + else { + this.__baseType.apply(instance, baseArguments); + } + } + return instance; +} +Type.prototype.isImplementedBy = function Type$isImplementedBy(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance", mayBeNull: true} + ]); + if (e) throw e; + if (typeof(instance) === "undefined" || instance === null) return false; + var instanceType = Object.getType(instance); + return !!(instanceType.implementsInterface && instanceType.implementsInterface(this)); +} +Type.prototype.isInstanceOfType = function Type$isInstanceOfType(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance", mayBeNull: true} + ]); + if (e) throw e; + return Sys._isInstanceOfType(this, instance); +} +Type.prototype.registerClass = function Type$registerClass(typeName, baseType, interfaceTypes) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "typeName", type: String}, + {name: "baseType", type: Type, mayBeNull: true, optional: true}, + {name: "interfaceTypes", type: Type, parameterArray: true} + ]); + if (e) throw e; + if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName); + var parsedName; + try { + parsedName = eval(typeName); + } + catch(e) { + throw Error.argument('typeName', Sys.Res.argumentTypeName); + } + if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName); + if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName)); + if ((arguments.length > 1) && (typeof(baseType) === 'undefined')) throw Error.argumentUndefined('baseType'); + if (baseType && !baseType.__class) throw Error.argument('baseType', Sys.Res.baseNotAClass); + this.prototype.constructor = this; + this.__typeName = typeName; + this.__class = true; + if (baseType) { + this.__baseType = baseType; + this.__basePrototypePending = true; + } + Sys.__upperCaseTypes[typeName.toUpperCase()] = this; + if (interfaceTypes) { + this.__interfaces = []; + this.resolveInheritance(); + for (var i = 2, l = arguments.length; i < l; i++) { + var interfaceType = arguments[i]; + if (!interfaceType.__interface) throw Error.argument('interfaceTypes[' + (i - 2) + ']', Sys.Res.notAnInterface); + for (var methodName in interfaceType.prototype) { + var method = interfaceType.prototype[methodName]; + if (!this.prototype[methodName]) { + this.prototype[methodName] = method; + } + } + this.__interfaces.push(interfaceType); + } + } + Sys.__registeredTypes[typeName] = true; + return this; +} +Type.prototype.registerInterface = function Type$registerInterface(typeName) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "typeName", type: String} + ]); + if (e) throw e; + if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName); + var parsedName; + try { + parsedName = eval(typeName); + } + catch(e) { + throw Error.argument('typeName', Sys.Res.argumentTypeName); + } + if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName); + if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName)); + Sys.__upperCaseTypes[typeName.toUpperCase()] = this; + this.prototype.constructor = this; + this.__typeName = typeName; + this.__interface = true; + Sys.__registeredTypes[typeName] = true; + return this; +} +Type.prototype.resolveInheritance = function Type$resolveInheritance() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this.__basePrototypePending) { + var baseType = this.__baseType; + baseType.resolveInheritance(); + for (var memberName in baseType.prototype) { + var memberValue = baseType.prototype[memberName]; + if (!this.prototype[memberName]) { + this.prototype[memberName] = memberValue; + } + } + delete this.__basePrototypePending; + } +} +Type.getRootNamespaces = function Type$getRootNamespaces() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return Array.clone(Sys.__rootNamespaces); +} +Type.isClass = function Type$isClass(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__class; +} +Type.isInterface = function Type$isInterface(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__interface; +} +Type.isNamespace = function Type$isNamespace(object) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(object) === 'undefined') || (object === null)) return false; + return !!object.__namespace; +} +Type.parse = function Type$parse(typeName, ns) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "typeName", type: String, mayBeNull: true}, + {name: "ns", mayBeNull: true, optional: true} + ]); + if (e) throw e; + var fn; + if (ns) { + fn = Sys.__upperCaseTypes[ns.getName().toUpperCase() + '.' + typeName.toUpperCase()]; + return fn || null; + } + if (!typeName) return null; + if (!Type.__htClasses) { + Type.__htClasses = {}; + } + fn = Type.__htClasses[typeName]; + if (!fn) { + fn = eval(typeName); + if (typeof(fn) !== 'function') throw Error.argument('typeName', Sys.Res.notATypeName); + Type.__htClasses[typeName] = fn; + } + return fn; +} +Type.registerNamespace = function Type$registerNamespace(namespacePath) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "namespacePath", type: String} + ]); + if (e) throw e; + Type._registerNamespace(namespacePath); +} +Type._registerNamespace = function Type$_registerNamespace(namespacePath) { + if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) throw Error.argument('namespacePath', Sys.Res.invalidNameSpace); + var rootObject = window; + var namespaceParts = namespacePath.split('.'); + for (var i = 0; i < namespaceParts.length; i++) { + var currentPart = namespaceParts[i]; + var ns = rootObject[currentPart]; + var nsType = typeof(ns); + if ((nsType !== "undefined") && (ns !== null)) { + if (nsType === "function") { + throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsClass, namespaceParts.splice(0, i + 1).join('.'))); + } + if ((typeof(ns) !== "object") || (ns instanceof Array)) { + throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsNonObject, namespaceParts.splice(0, i + 1).join('.'))); + } + } + if (!ns) { + ns = rootObject[currentPart] = {}; + } + if (!ns.__namespace) { + if ((i === 0) && (namespacePath !== "Sys")) { + Sys.__rootNamespaces[Sys.__rootNamespaces.length] = ns; + } + ns.__namespace = true; + ns.__typeName = namespaceParts.slice(0, i + 1).join('.'); + var parsedName; + try { + parsedName = eval(ns.__typeName); + } + catch(e) { + parsedName = null; + } + if (parsedName !== ns) { + delete rootObject[currentPart]; + throw Error.argument('namespacePath', Sys.Res.invalidNameSpace); + } + ns.getName = function ns$getName() {return this.__typeName;} + } + rootObject = ns; + } +} +Type._checkDependency = function Type$_checkDependency(dependency, featureName) { + var scripts = Type._registerScript._scripts, isDependent = (scripts ? (!!scripts[dependency]) : false); + if ((typeof(featureName) !== 'undefined') && !isDependent) { + throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded, + featureName, dependency)); + } + return isDependent; +} +Type._registerScript = function Type$_registerScript(scriptName, dependencies) { + var scripts = Type._registerScript._scripts; + if (!scripts) { + Type._registerScript._scripts = scripts = {}; + } + if (scripts[scriptName]) { + throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded, scriptName)); + } + scripts[scriptName] = true; + if (dependencies) { + for (var i = 0, l = dependencies.length; i < l; i++) { + var dependency = dependencies[i]; + if (!Type._checkDependency(dependency)) { + throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound, scriptName, dependency)); + } + } + } +} +Type._registerNamespace("Sys"); +Sys.__upperCaseTypes = {}; +Sys.__rootNamespaces = [Sys]; +Sys.__registeredTypes = {}; +Sys._isInstanceOfType = function Sys$_isInstanceOfType(type, instance) { + if (typeof(instance) === "undefined" || instance === null) return false; + if (instance instanceof type) return true; + var instanceType = Object.getType(instance); + return !!(instanceType === type) || + (instanceType.inheritsFrom && instanceType.inheritsFrom(type)) || + (instanceType.implementsInterface && instanceType.implementsInterface(type)); +} +Sys._getBaseMethod = function Sys$_getBaseMethod(type, instance, name) { + if (!Sys._isInstanceOfType(type, instance)) throw Error.argumentType('instance', Object.getType(instance), type); + var baseType = type.getBaseType(); + if (baseType) { + var baseMethod = baseType.prototype[name]; + return (baseMethod instanceof Function) ? baseMethod : null; + } + return null; +} +Sys._isDomElement = function Sys$_isDomElement(obj) { + var val = false; + if (typeof (obj.nodeType) !== 'number') { + var doc = obj.ownerDocument || obj.document || obj; + if (doc != obj) { + var w = doc.defaultView || doc.parentWindow; + val = (w != obj); + } + else { + val = (typeof (doc.body) === 'undefined'); + } + } + return !val; +} + +Array.__typeName = 'Array'; +Array.__class = true; +Array.add = Array.enqueue = function Array$enqueue(array, item) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + array[array.length] = item; +} +Array.addRange = function Array$addRange(array, items) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "items", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + array.push.apply(array, items); +} +Array.clear = function Array$clear(array) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + array.length = 0; +} +Array.clone = function Array$clone(array) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + if (array.length === 1) { + return [array[0]]; + } + else { + return Array.apply(null, array); + } +} +Array.contains = function Array$contains(array, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + return (Sys._indexOf(array, item) >= 0); +} +Array.dequeue = function Array$dequeue(array) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + return array.shift(); +} +Array.forEach = function Array$forEach(array, method, instance) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "method", type: Function}, + {name: "instance", mayBeNull: true, optional: true} + ]); + if (e) throw e; + for (var i = 0, l = array.length; i < l; i++) { + var elt = array[i]; + if (typeof(elt) !== 'undefined') method.call(instance, elt, i, array); + } +} +Array.indexOf = function Array$indexOf(array, item, start) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true, optional: true}, + {name: "start", mayBeNull: true, optional: true} + ]); + if (e) throw e; + return Sys._indexOf(array, item, start); +} +Array.insert = function Array$insert(array, index, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "index", mayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + array.splice(index, 0, item); +} +Array.parse = function Array$parse(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String, mayBeNull: true} + ]); + if (e) throw e; + if (!value) return []; + var v = eval(value); + if (!Array.isInstanceOfType(v)) throw Error.argument('value', Sys.Res.arrayParseBadFormat); + return v; +} +Array.remove = function Array$remove(array, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + var index = Sys._indexOf(array, item); + if (index >= 0) { + array.splice(index, 1); + } + return (index >= 0); +} +Array.removeAt = function Array$removeAt(array, index) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "index", mayBeNull: true} + ]); + if (e) throw e; + array.splice(index, 1); +} +Sys._indexOf = function Sys$_indexOf(array, item, start) { + if (typeof(item) === "undefined") return -1; + var length = array.length; + if (length !== 0) { + start = start - 0; + if (isNaN(start)) { + start = 0; + } + else { + if (isFinite(start)) { + start = start - (start % 1); + } + if (start < 0) { + start = Math.max(0, length + start); + } + } + for (var i = start; i < length; i++) { + if ((typeof(array[i]) !== "undefined") && (array[i] === item)) { + return i; + } + } + } + return -1; +} +Type._registerScript._scripts = { + "MicrosoftAjaxCore.js": true, + "MicrosoftAjaxGlobalization.js": true, + "MicrosoftAjaxSerialization.js": true, + "MicrosoftAjaxComponentModel.js": true, + "MicrosoftAjaxHistory.js": true, + "MicrosoftAjaxNetwork.js" : true, + "MicrosoftAjaxWebServices.js": true }; + +Sys.IDisposable = function Sys$IDisposable() { + throw Error.notImplemented(); +} + function Sys$IDisposable$dispose() { + throw Error.notImplemented(); + } +Sys.IDisposable.prototype = { + dispose: Sys$IDisposable$dispose +} +Sys.IDisposable.registerInterface('Sys.IDisposable'); + +Sys.StringBuilder = function Sys$StringBuilder(initialText) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "initialText", mayBeNull: true, optional: true} + ]); + if (e) throw e; + this._parts = (typeof(initialText) !== 'undefined' && initialText !== null && initialText !== '') ? + [initialText.toString()] : []; + this._value = {}; + this._len = 0; +} + function Sys$StringBuilder$append(text) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "text", mayBeNull: true} + ]); + if (e) throw e; + this._parts[this._parts.length] = text; + } + function Sys$StringBuilder$appendLine(text) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "text", mayBeNull: true, optional: true} + ]); + if (e) throw e; + this._parts[this._parts.length] = + ((typeof(text) === 'undefined') || (text === null) || (text === '')) ? + '\r\n' : text + '\r\n'; + } + function Sys$StringBuilder$clear() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._parts = []; + this._value = {}; + this._len = 0; + } + function Sys$StringBuilder$isEmpty() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._parts.length === 0) return true; + return this.toString() === ''; + } + function Sys$StringBuilder$toString(separator) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "separator", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + separator = separator || ''; + var parts = this._parts; + if (this._len !== parts.length) { + this._value = {}; + this._len = parts.length; + } + var val = this._value; + if (typeof(val[separator]) === 'undefined') { + if (separator !== '') { + for (var i = 0; i < parts.length;) { + if ((typeof(parts[i]) === 'undefined') || (parts[i] === '') || (parts[i] === null)) { + parts.splice(i, 1); + } + else { + i++; + } + } + } + val[separator] = this._parts.join(separator); + } + return val[separator]; + } +Sys.StringBuilder.prototype = { + append: Sys$StringBuilder$append, + appendLine: Sys$StringBuilder$appendLine, + clear: Sys$StringBuilder$clear, + isEmpty: Sys$StringBuilder$isEmpty, + toString: Sys$StringBuilder$toString +} +Sys.StringBuilder.registerClass('Sys.StringBuilder'); + +Sys.Browser = {}; +Sys.Browser.InternetExplorer = {}; +Sys.Browser.Firefox = {}; +Sys.Browser.Safari = {}; +Sys.Browser.Opera = {}; +Sys.Browser.agent = null; +Sys.Browser.hasDebuggerStatement = false; +Sys.Browser.name = navigator.appName; +Sys.Browser.version = parseFloat(navigator.appVersion); +Sys.Browser.documentMode = 0; +if (navigator.userAgent.indexOf(' MSIE ') > -1) { + Sys.Browser.agent = Sys.Browser.InternetExplorer; + Sys.Browser.version = parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]); + if (Sys.Browser.version >= 8) { + if (document.documentMode >= 7) { + Sys.Browser.documentMode = document.documentMode; + } + } + Sys.Browser.hasDebuggerStatement = true; +} +else if (navigator.userAgent.indexOf(' Firefox/') > -1) { + Sys.Browser.agent = Sys.Browser.Firefox; + Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]); + Sys.Browser.name = 'Firefox'; + Sys.Browser.hasDebuggerStatement = true; +} +else if (navigator.userAgent.indexOf(' AppleWebKit/') > -1) { + Sys.Browser.agent = Sys.Browser.Safari; + Sys.Browser.version = parseFloat(navigator.userAgent.match(/ AppleWebKit\/(\d+(\.\d+)?)/)[1]); + Sys.Browser.name = 'Safari'; +} +else if (navigator.userAgent.indexOf('Opera/') > -1) { + Sys.Browser.agent = Sys.Browser.Opera; +} + +Sys.EventArgs = function Sys$EventArgs() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); +} +Sys.EventArgs.registerClass('Sys.EventArgs'); +Sys.EventArgs.Empty = new Sys.EventArgs(); + +Sys.CancelEventArgs = function Sys$CancelEventArgs() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + Sys.CancelEventArgs.initializeBase(this); + this._cancel = false; +} + function Sys$CancelEventArgs$get_cancel() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._cancel; + } + function Sys$CancelEventArgs$set_cancel(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); + if (e) throw e; + this._cancel = value; + } +Sys.CancelEventArgs.prototype = { + get_cancel: Sys$CancelEventArgs$get_cancel, + set_cancel: Sys$CancelEventArgs$set_cancel +} +Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs); +Type.registerNamespace('Sys.UI'); + +Sys._Debug = function Sys$_Debug() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); +} + function Sys$_Debug$_appendConsole(text) { + if ((typeof(Debug) !== 'undefined') && Debug.writeln) { + Debug.writeln(text); + } + if (window.console && window.console.log) { + window.console.log(text); + } + if (window.opera) { + window.opera.postError(text); + } + if (window.debugService) { + window.debugService.trace(text); + } + } + function Sys$_Debug$_appendTrace(text) { + var traceElement = document.getElementById('TraceConsole'); + if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) { + traceElement.value += text + '\n'; + } + } + function Sys$_Debug$assert(condition, message, displayCaller) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "condition", type: Boolean}, + {name: "message", type: String, mayBeNull: true, optional: true}, + {name: "displayCaller", type: Boolean, optional: true} + ]); + if (e) throw e; + if (!condition) { + message = (displayCaller && this.assert.caller) ? + String.format(Sys.Res.assertFailedCaller, message, this.assert.caller) : + String.format(Sys.Res.assertFailed, message); + if (confirm(String.format(Sys.Res.breakIntoDebugger, message))) { + this.fail(message); + } + } + } + function Sys$_Debug$clearTrace() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var traceElement = document.getElementById('TraceConsole'); + if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) { + traceElement.value = ''; + } + } + function Sys$_Debug$fail(message) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true} + ]); + if (e) throw e; + this._appendConsole(message); + if (Sys.Browser.hasDebuggerStatement) { + eval('debugger'); + } + } + function Sys$_Debug$trace(text) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "text"} + ]); + if (e) throw e; + this._appendConsole(text); + this._appendTrace(text); + } + function Sys$_Debug$traceDump(object, name) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", mayBeNull: true}, + {name: "name", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var text = this._traceDump(object, name, true); + } + function Sys$_Debug$_traceDump(object, name, recursive, indentationPadding, loopArray) { + name = name? name : 'traceDump'; + indentationPadding = indentationPadding? indentationPadding : ''; + if (object === null) { + this.trace(indentationPadding + name + ': null'); + return; + } + switch(typeof(object)) { + case 'undefined': + this.trace(indentationPadding + name + ': Undefined'); + break; + case 'number': case 'string': case 'boolean': + this.trace(indentationPadding + name + ': ' + object); + break; + default: + if (Date.isInstanceOfType(object) || RegExp.isInstanceOfType(object)) { + this.trace(indentationPadding + name + ': ' + object.toString()); + break; + } + if (!loopArray) { + loopArray = []; + } + else if (Array.contains(loopArray, object)) { + this.trace(indentationPadding + name + ': ...'); + return; + } + Array.add(loopArray, object); + if ((object == window) || (object === document) || + (window.HTMLElement && (object instanceof HTMLElement)) || + (typeof(object.nodeName) === 'string')) { + var tag = object.tagName? object.tagName : 'DomElement'; + if (object.id) { + tag += ' - ' + object.id; + } + this.trace(indentationPadding + name + ' {' + tag + '}'); + } + else { + var typeName = Object.getTypeName(object); + this.trace(indentationPadding + name + (typeof(typeName) === 'string' ? ' {' + typeName + '}' : '')); + if ((indentationPadding === '') || recursive) { + indentationPadding += " "; + var i, length, properties, p, v; + if (Array.isInstanceOfType(object)) { + length = object.length; + for (i = 0; i < length; i++) { + this._traceDump(object[i], '[' + i + ']', recursive, indentationPadding, loopArray); + } + } + else { + for (p in object) { + v = object[p]; + if (!Function.isInstanceOfType(v)) { + this._traceDump(v, p, recursive, indentationPadding, loopArray); + } + } + } + } + } + Array.remove(loopArray, object); + } + } +Sys._Debug.prototype = { + _appendConsole: Sys$_Debug$_appendConsole, + _appendTrace: Sys$_Debug$_appendTrace, + assert: Sys$_Debug$assert, + clearTrace: Sys$_Debug$clearTrace, + fail: Sys$_Debug$fail, + trace: Sys$_Debug$trace, + traceDump: Sys$_Debug$traceDump, + _traceDump: Sys$_Debug$_traceDump +} +Sys._Debug.registerClass('Sys._Debug'); +Sys.Debug = new Sys._Debug(); + Sys.Debug.isDebug = true; + +function Sys$Enum$parse(value, ignoreCase) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String}, + {name: "ignoreCase", type: Boolean, optional: true} + ]); + if (e) throw e; + var values, parsed, val; + if (ignoreCase) { + values = this.__lowerCaseValues; + if (!values) { + this.__lowerCaseValues = values = {}; + var prototype = this.prototype; + for (var name in prototype) { + values[name.toLowerCase()] = prototype[name]; + } + } + } + else { + values = this.prototype; + } + if (!this.__flags) { + val = (ignoreCase ? value.toLowerCase() : value); + parsed = values[val.trim()]; + if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, this.__typeName)); + return parsed; + } + else { + var parts = (ignoreCase ? value.toLowerCase() : value).split(','); + var v = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var part = parts[i].trim(); + parsed = values[part]; + if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value.split(',')[i].trim(), this.__typeName)); + v |= parsed; + } + return v; + } +} +function Sys$Enum$toString(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", mayBeNull: true, optional: true} + ]); + if (e) throw e; + if ((typeof(value) === 'undefined') || (value === null)) return this.__string; + if ((typeof(value) != 'number') || ((value % 1) !== 0)) throw Error.argumentType('value', Object.getType(value), this); + var values = this.prototype; + var i; + if (!this.__flags || (value === 0)) { + for (i in values) { + if (values[i] === value) { + return i; + } + } + } + else { + var sorted = this.__sortedValues; + if (!sorted) { + sorted = []; + for (i in values) { + sorted[sorted.length] = {key: i, value: values[i]}; + } + sorted.sort(function(a, b) { + return a.value - b.value; + }); + this.__sortedValues = sorted; + } + var parts = []; + var v = value; + for (i = sorted.length - 1; i >= 0; i--) { + var kvp = sorted[i]; + var vali = kvp.value; + if (vali === 0) continue; + if ((vali & value) === vali) { + parts[parts.length] = kvp.key; + v -= vali; + if (v === 0) break; + } + } + if (parts.length && v === 0) return parts.reverse().join(', '); + } + throw Error.argumentOutOfRange('value', value, String.format(Sys.Res.enumInvalidValue, value, this.__typeName)); +} +Type.prototype.registerEnum = function Type$registerEnum(name, flags) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "name", type: String}, + {name: "flags", type: Boolean, optional: true} + ]); + if (e) throw e; + if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw Error.argument('name', Sys.Res.notATypeName); + var parsedName; + try { + parsedName = eval(name); + } + catch(e) { + throw Error.argument('name', Sys.Res.argumentTypeName); + } + if (parsedName !== this) throw Error.argument('name', Sys.Res.badTypeName); + if (Sys.__registeredTypes[name]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, name)); + for (var j in this.prototype) { + var val = this.prototype[j]; + if (!Type.__identifierRegExp.test(j)) throw Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, j)); + if (typeof(val) !== 'number' || (val % 1) !== 0) throw Error.invalidOperation(Sys.Res.enumValueNotInteger); + if (typeof(this[j]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.enumReservedName, j)); + } + Sys.__upperCaseTypes[name.toUpperCase()] = this; + for (var i in this.prototype) { + this[i] = this.prototype[i]; + } + this.__typeName = name; + this.parse = Sys$Enum$parse; + this.__string = this.toString(); + this.toString = Sys$Enum$toString; + this.__flags = flags; + this.__enum = true; + Sys.__registeredTypes[name] = true; +} +Type.isEnum = function Type$isEnum(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__enum; +} +Type.isFlags = function Type$isFlags(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__flags; +} +Sys.CollectionChange = function Sys$CollectionChange(action, newItems, newStartingIndex, oldItems, oldStartingIndex) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "action", type: Sys.NotifyCollectionChangedAction}, + {name: "newItems", mayBeNull: true, optional: true}, + {name: "newStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true}, + {name: "oldItems", mayBeNull: true, optional: true}, + {name: "oldStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true} + ]); + if (e) throw e; + this.action = action; + if (newItems) { + if (!(newItems instanceof Array)) { + newItems = [newItems]; + } + } + this.newItems = newItems || null; + if (typeof newStartingIndex !== "number") { + newStartingIndex = -1; + } + this.newStartingIndex = newStartingIndex; + if (oldItems) { + if (!(oldItems instanceof Array)) { + oldItems = [oldItems]; + } + } + this.oldItems = oldItems || null; + if (typeof oldStartingIndex !== "number") { + oldStartingIndex = -1; + } + this.oldStartingIndex = oldStartingIndex; +} +Sys.CollectionChange.registerClass("Sys.CollectionChange"); +Sys.NotifyCollectionChangedAction = function Sys$NotifyCollectionChangedAction() { + /// + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.NotifyCollectionChangedAction.prototype = { + add: 0, + remove: 1, + reset: 2 +} +Sys.NotifyCollectionChangedAction.registerEnum('Sys.NotifyCollectionChangedAction'); +Sys.NotifyCollectionChangedEventArgs = function Sys$NotifyCollectionChangedEventArgs(changes) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "changes", type: Array, elementType: Sys.CollectionChange} + ]); + if (e) throw e; + this._changes = changes; + Sys.NotifyCollectionChangedEventArgs.initializeBase(this); +} + function Sys$NotifyCollectionChangedEventArgs$get_changes() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._changes || []; + } +Sys.NotifyCollectionChangedEventArgs.prototype = { + get_changes: Sys$NotifyCollectionChangedEventArgs$get_changes +} +Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs", Sys.EventArgs); +Sys.Observer = function Sys$Observer() { + throw Error.invalidOperation(); +} +Sys.Observer.registerClass("Sys.Observer"); +Sys.Observer.makeObservable = function Sys$Observer$makeObservable(target) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + var isArray = target instanceof Array, + o = Sys.Observer; + Sys.Observer._ensureObservable(target); + if (target.setValue === o._observeMethods.setValue) return target; + o._addMethods(target, o._observeMethods); + if (isArray) { + o._addMethods(target, o._arrayMethods); + } + return target; +} +Sys.Observer._ensureObservable = function Sys$Observer$_ensureObservable(target) { + var type = typeof target; + if ((type === "string") || (type === "number") || (type === "boolean") || (type === "date")) { + throw Error.invalidOperation(String.format(Sys.Res.notObservable, type)); + } +} +Sys.Observer._addMethods = function Sys$Observer$_addMethods(target, methods) { + for (var m in methods) { + if (target[m] && (target[m] !== methods[m])) { + throw Error.invalidOperation(String.format(Sys.Res.observableConflict, m)); + } + target[m] = methods[m]; + } +} +Sys.Observer._addEventHandler = function Sys$Observer$_addEventHandler(target, eventName, handler) { + Sys.Observer._getContext(target, true).events._addHandler(eventName, handler); +} +Sys.Observer.addEventHandler = function Sys$Observer$addEventHandler(target, eventName, handler) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._addEventHandler(target, eventName, handler); +} +Sys.Observer._removeEventHandler = function Sys$Observer$_removeEventHandler(target, eventName, handler) { + Sys.Observer._getContext(target, true).events._removeHandler(eventName, handler); +} +Sys.Observer.removeEventHandler = function Sys$Observer$removeEventHandler(target, eventName, handler) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._removeEventHandler(target, eventName, handler); +} +Sys.Observer.raiseEvent = function Sys$Observer$raiseEvent(target, eventName, eventArgs) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "eventName", type: String}, + {name: "eventArgs", type: Sys.EventArgs} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + var ctx = Sys.Observer._getContext(target); + if (!ctx) return; + var handler = ctx.events.getHandler(eventName); + if (handler) { + handler(target, eventArgs); + } +} +Sys.Observer.addPropertyChanged = function Sys$Observer$addPropertyChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._addEventHandler(target, "propertyChanged", handler); +} +Sys.Observer.removePropertyChanged = function Sys$Observer$removePropertyChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._removeEventHandler(target, "propertyChanged", handler); +} +Sys.Observer.beginUpdate = function Sys$Observer$beginUpdate(target) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._getContext(target, true).updating = true; +} +Sys.Observer.endUpdate = function Sys$Observer$endUpdate(target) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + var ctx = Sys.Observer._getContext(target); + if (!ctx || !ctx.updating) return; + ctx.updating = false; + var dirty = ctx.dirty; + ctx.dirty = false; + if (dirty) { + if (target instanceof Array) { + var changes = ctx.changes; + ctx.changes = null; + Sys.Observer.raiseCollectionChanged(target, changes); + } + Sys.Observer.raisePropertyChanged(target, ""); + } +} +Sys.Observer.isUpdating = function Sys$Observer$isUpdating(target) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + var ctx = Sys.Observer._getContext(target); + return ctx ? ctx.updating : false; +} +Sys.Observer._setValue = function Sys$Observer$_setValue(target, propertyName, value) { + var getter, setter, mainTarget = target, path = propertyName.split('.'); + for (var i = 0, l = (path.length - 1); i < l ; i++) { + var name = path[i]; + getter = target["get_" + name]; + if (typeof (getter) === "function") { + target = getter.call(target); + } + else { + target = target[name]; + } + var type = typeof (target); + if ((target === null) || (type === "undefined")) { + throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath, propertyName)); + } + } + var currentValue, lastPath = path[l]; + getter = target["get_" + lastPath]; + setter = target["set_" + lastPath]; + if (typeof(getter) === 'function') { + currentValue = getter.call(target); + } + else { + currentValue = target[lastPath]; + } + if (typeof(setter) === 'function') { + setter.call(target, value); + } + else { + target[lastPath] = value; + } + if (currentValue !== value) { + var ctx = Sys.Observer._getContext(mainTarget); + if (ctx && ctx.updating) { + ctx.dirty = true; + return; + }; + Sys.Observer.raisePropertyChanged(mainTarget, path[0]); + } +} +Sys.Observer.setValue = function Sys$Observer$setValue(target, propertyName, value) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "propertyName", type: String}, + {name: "value", mayBeNull: true} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._setValue(target, propertyName, value); +} +Sys.Observer.raisePropertyChanged = function Sys$Observer$raisePropertyChanged(target, propertyName) { + /// + /// + /// + Sys.Observer.raiseEvent(target, "propertyChanged", new Sys.PropertyChangedEventArgs(propertyName)); +} +Sys.Observer.addCollectionChanged = function Sys$Observer$addCollectionChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._addEventHandler(target, "collectionChanged", handler); +} +Sys.Observer.removeCollectionChanged = function Sys$Observer$removeCollectionChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._removeEventHandler(target, "collectionChanged", handler); +} +Sys.Observer._collectionChange = function Sys$Observer$_collectionChange(target, change) { + var ctx = Sys.Observer._getContext(target); + if (ctx && ctx.updating) { + ctx.dirty = true; + var changes = ctx.changes; + if (!changes) { + ctx.changes = changes = [change]; + } + else { + changes.push(change); + } + } + else { + Sys.Observer.raiseCollectionChanged(target, [change]); + Sys.Observer.raisePropertyChanged(target, 'length'); + } +} +Sys.Observer.add = function Sys$Observer$add(target, item) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], target.length); + Array.add(target, item); + Sys.Observer._collectionChange(target, change); +} +Sys.Observer.addRange = function Sys$Observer$addRange(target, items) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "items", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, items, target.length); + Array.addRange(target, items); + Sys.Observer._collectionChange(target, change); +} +Sys.Observer.clear = function Sys$Observer$clear(target) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + var oldItems = Array.clone(target); + Array.clear(target); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset, null, -1, oldItems, 0)); +} +Sys.Observer.insert = function Sys$Observer$insert(target, index, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "index", type: Number, integer: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + Array.insert(target, index, item); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], index)); +} +Sys.Observer.remove = function Sys$Observer$remove(target, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + var index = Array.indexOf(target, item); + if (index !== -1) { + Array.remove(target, item); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index)); + return true; + } + return false; +} +Sys.Observer.removeAt = function Sys$Observer$removeAt(target, index) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "index", type: Number, integer: true} + ]); + if (e) throw e; + if ((index > -1) && (index < target.length)) { + var item = target[index]; + Array.removeAt(target, index); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index)); + } +} +Sys.Observer.raiseCollectionChanged = function Sys$Observer$raiseCollectionChanged(target, changes) { + /// + /// + /// + Sys.Observer.raiseEvent(target, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes)); +} +Sys.Observer._observeMethods = { + add_propertyChanged: function(handler) { + Sys.Observer._addEventHandler(this, "propertyChanged", handler); + }, + remove_propertyChanged: function(handler) { + Sys.Observer._removeEventHandler(this, "propertyChanged", handler); + }, + addEventHandler: function(eventName, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._addEventHandler(this, eventName, handler); + }, + removeEventHandler: function(eventName, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._removeEventHandler(this, eventName, handler); + }, + get_isUpdating: function() { + /// + /// + return Sys.Observer.isUpdating(this); + }, + beginUpdate: function() { + /// + Sys.Observer.beginUpdate(this); + }, + endUpdate: function() { + /// + Sys.Observer.endUpdate(this); + }, + setValue: function(name, value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "name", type: String}, + {name: "value", mayBeNull: true} + ]); + if (e) throw e; + Sys.Observer._setValue(this, name, value); + }, + raiseEvent: function(eventName, eventArgs) { + /// + /// + /// + Sys.Observer.raiseEvent(this, eventName, eventArgs); + }, + raisePropertyChanged: function(name) { + /// + /// + Sys.Observer.raiseEvent(this, "propertyChanged", new Sys.PropertyChangedEventArgs(name)); + } +} +Sys.Observer._arrayMethods = { + add_collectionChanged: function(handler) { + Sys.Observer._addEventHandler(this, "collectionChanged", handler); + }, + remove_collectionChanged: function(handler) { + Sys.Observer._removeEventHandler(this, "collectionChanged", handler); + }, + add: function(item) { + /// + /// + Sys.Observer.add(this, item); + }, + addRange: function(items) { + /// + /// + Sys.Observer.addRange(this, items); + }, + clear: function() { + /// + Sys.Observer.clear(this); + }, + insert: function(index, item) { + /// + /// + /// + Sys.Observer.insert(this, index, item); + }, + remove: function(item) { + /// + /// + /// + return Sys.Observer.remove(this, item); + }, + removeAt: function(index) { + /// + /// + Sys.Observer.removeAt(this, index); + }, + raiseCollectionChanged: function(changes) { + /// + /// + Sys.Observer.raiseEvent(this, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes)); + } +} +Sys.Observer._getContext = function Sys$Observer$_getContext(obj, create) { + var ctx = obj._observerContext; + if (ctx) return ctx(); + if (create) { + return (obj._observerContext = Sys.Observer._createContext())(); + } + return null; +} +Sys.Observer._createContext = function Sys$Observer$_createContext() { + var ctx = { + events: new Sys.EventHandlerList() + }; + return function() { + return ctx; + } +} +Date._appendPreOrPostMatch = function Date$_appendPreOrPostMatch(preMatch, strBuilder) { + var quoteCount = 0; + var escaped = false; + for (var i = 0, il = preMatch.length; i < il; i++) { + var c = preMatch.charAt(i); + switch (c) { + case '\'': + if (escaped) strBuilder.append("'"); + else quoteCount++; + escaped = false; + break; + case '\\': + if (escaped) strBuilder.append("\\"); + escaped = !escaped; + break; + default: + strBuilder.append(c); + escaped = false; + break; + } + } + return quoteCount; +} +Date._expandFormat = function Date$_expandFormat(dtf, format) { + if (!format) { + format = "F"; + } + var len = format.length; + if (len === 1) { + switch (format) { + case "d": + return dtf.ShortDatePattern; + case "D": + return dtf.LongDatePattern; + case "t": + return dtf.ShortTimePattern; + case "T": + return dtf.LongTimePattern; + case "f": + return dtf.LongDatePattern + " " + dtf.ShortTimePattern; + case "F": + return dtf.FullDateTimePattern; + case "M": case "m": + return dtf.MonthDayPattern; + case "s": + return dtf.SortableDateTimePattern; + case "Y": case "y": + return dtf.YearMonthPattern; + default: + throw Error.format(Sys.Res.formatInvalidString); + } + } + else if ((len === 2) && (format.charAt(0) === "%")) { + format = format.charAt(1); + } + return format; +} +Date._expandYear = function Date$_expandYear(dtf, year) { + var now = new Date(), + era = Date._getEra(now); + if (year < 100) { + var curr = Date._getEraYear(now, dtf, era); + year += curr - (curr % 100); + if (year > dtf.Calendar.TwoDigitYearMax) { + year -= 100; + } + } + return year; +} +Date._getEra = function Date$_getEra(date, eras) { + if (!eras) return 0; + var start, ticks = date.getTime(); + for (var i = 0, l = eras.length; i < l; i += 4) { + start = eras[i+2]; + if ((start === null) || (ticks >= start)) { + return i; + } + } + return 0; +} +Date._getEraYear = function Date$_getEraYear(date, dtf, era, sortable) { + var year = date.getFullYear(); + if (!sortable && dtf.eras) { + year -= dtf.eras[era + 3]; + } + return year; +} +Date._getParseRegExp = function Date$_getParseRegExp(dtf, format) { + if (!dtf._parseRegExp) { + dtf._parseRegExp = {}; + } + else if (dtf._parseRegExp[format]) { + return dtf._parseRegExp[format]; + } + var expFormat = Date._expandFormat(dtf, format); + expFormat = expFormat.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1"); + var regexp = new Sys.StringBuilder("^"); + var groups = []; + var index = 0; + var quoteCount = 0; + var tokenRegExp = Date._getTokenRegExp(); + var match; + while ((match = tokenRegExp.exec(expFormat)) !== null) { + var preMatch = expFormat.slice(index, match.index); + index = tokenRegExp.lastIndex; + quoteCount += Date._appendPreOrPostMatch(preMatch, regexp); + if ((quoteCount%2) === 1) { + regexp.append(match[0]); + continue; + } + switch (match[0]) { + case 'dddd': case 'ddd': + case 'MMMM': case 'MMM': + case 'gg': case 'g': + regexp.append("(\\D+)"); + break; + case 'tt': case 't': + regexp.append("(\\D*)"); + break; + case 'yyyy': + regexp.append("(\\d{4})"); + break; + case 'fff': + regexp.append("(\\d{3})"); + break; + case 'ff': + regexp.append("(\\d{2})"); + break; + case 'f': + regexp.append("(\\d)"); + break; + case 'dd': case 'd': + case 'MM': case 'M': + case 'yy': case 'y': + case 'HH': case 'H': + case 'hh': case 'h': + case 'mm': case 'm': + case 'ss': case 's': + regexp.append("(\\d\\d?)"); + break; + case 'zzz': + regexp.append("([+-]?\\d\\d?:\\d{2})"); + break; + case 'zz': case 'z': + regexp.append("([+-]?\\d\\d?)"); + break; + case '/': + regexp.append("(\\" + dtf.DateSeparator + ")"); + break; + default: + Sys.Debug.fail("Invalid date format pattern"); + } + Array.add(groups, match[0]); + } + Date._appendPreOrPostMatch(expFormat.slice(index), regexp); + regexp.append("$"); + var regexpStr = regexp.toString().replace(/\s+/g, "\\s+"); + var parseRegExp = {'regExp': regexpStr, 'groups': groups}; + dtf._parseRegExp[format] = parseRegExp; + return parseRegExp; +} +Date._getTokenRegExp = function Date$_getTokenRegExp() { + return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g; +} +Date.parseLocale = function Date$parseLocale(value, formats) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String}, + {name: "formats", mayBeNull: true, optional: true, parameterArray: true} + ]); + if (e) throw e; + return Date._parse(value, Sys.CultureInfo.CurrentCulture, arguments); +} +Date.parseInvariant = function Date$parseInvariant(value, formats) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String}, + {name: "formats", mayBeNull: true, optional: true, parameterArray: true} + ]); + if (e) throw e; + return Date._parse(value, Sys.CultureInfo.InvariantCulture, arguments); +} +Date._parse = function Date$_parse(value, cultureInfo, args) { + var i, l, date, format, formats, custom = false; + for (i = 1, l = args.length; i < l; i++) { + format = args[i]; + if (format) { + custom = true; + date = Date._parseExact(value, format, cultureInfo); + if (date) return date; + } + } + if (! custom) { + formats = cultureInfo._getDateTimeFormats(); + for (i = 0, l = formats.length; i < l; i++) { + date = Date._parseExact(value, formats[i], cultureInfo); + if (date) return date; + } + } + return null; +} +Date._parseExact = function Date$_parseExact(value, format, cultureInfo) { + value = value.trim(); + var dtf = cultureInfo.dateTimeFormat, + parseInfo = Date._getParseRegExp(dtf, format), + match = new RegExp(parseInfo.regExp).exec(value); + if (match === null) return null; + + var groups = parseInfo.groups, + era = null, year = null, month = null, date = null, weekDay = null, + hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null, + pmHour = false; + for (var j = 0, jl = groups.length; j < jl; j++) { + var matchGroup = match[j+1]; + if (matchGroup) { + switch (groups[j]) { + case 'dd': case 'd': + date = parseInt(matchGroup, 10); + if ((date < 1) || (date > 31)) return null; + break; + case 'MMMM': + month = cultureInfo._getMonthIndex(matchGroup); + if ((month < 0) || (month > 11)) return null; + break; + case 'MMM': + month = cultureInfo._getAbbrMonthIndex(matchGroup); + if ((month < 0) || (month > 11)) return null; + break; + case 'M': case 'MM': + month = parseInt(matchGroup, 10) - 1; + if ((month < 0) || (month > 11)) return null; + break; + case 'y': case 'yy': + year = Date._expandYear(dtf,parseInt(matchGroup, 10)); + if ((year < 0) || (year > 9999)) return null; + break; + case 'yyyy': + year = parseInt(matchGroup, 10); + if ((year < 0) || (year > 9999)) return null; + break; + case 'h': case 'hh': + hour = parseInt(matchGroup, 10); + if (hour === 12) hour = 0; + if ((hour < 0) || (hour > 11)) return null; + break; + case 'H': case 'HH': + hour = parseInt(matchGroup, 10); + if ((hour < 0) || (hour > 23)) return null; + break; + case 'm': case 'mm': + min = parseInt(matchGroup, 10); + if ((min < 0) || (min > 59)) return null; + break; + case 's': case 'ss': + sec = parseInt(matchGroup, 10); + if ((sec < 0) || (sec > 59)) return null; + break; + case 'tt': case 't': + var upperToken = matchGroup.toUpperCase(); + pmHour = (upperToken === dtf.PMDesignator.toUpperCase()); + if (!pmHour && (upperToken !== dtf.AMDesignator.toUpperCase())) return null; + break; + case 'f': + msec = parseInt(matchGroup, 10) * 100; + if ((msec < 0) || (msec > 999)) return null; + break; + case 'ff': + msec = parseInt(matchGroup, 10) * 10; + if ((msec < 0) || (msec > 999)) return null; + break; + case 'fff': + msec = parseInt(matchGroup, 10); + if ((msec < 0) || (msec > 999)) return null; + break; + case 'dddd': + weekDay = cultureInfo._getDayIndex(matchGroup); + if ((weekDay < 0) || (weekDay > 6)) return null; + break; + case 'ddd': + weekDay = cultureInfo._getAbbrDayIndex(matchGroup); + if ((weekDay < 0) || (weekDay > 6)) return null; + break; + case 'zzz': + var offsets = matchGroup.split(/:/); + if (offsets.length !== 2) return null; + hourOffset = parseInt(offsets[0], 10); + if ((hourOffset < -12) || (hourOffset > 13)) return null; + var minOffset = parseInt(offsets[1], 10); + if ((minOffset < 0) || (minOffset > 59)) return null; + tzMinOffset = (hourOffset * 60) + (matchGroup.startsWith('-')? -minOffset : minOffset); + break; + case 'z': case 'zz': + hourOffset = parseInt(matchGroup, 10); + if ((hourOffset < -12) || (hourOffset > 13)) return null; + tzMinOffset = hourOffset * 60; + break; + case 'g': case 'gg': + var eraName = matchGroup; + if (!eraName || !dtf.eras) return null; + eraName = eraName.toLowerCase().trim(); + for (var i = 0, l = dtf.eras.length; i < l; i += 4) { + if (eraName === dtf.eras[i + 1].toLowerCase()) { + era = i; + break; + } + } + if (era === null) return null; + break; + } + } + } + var result = new Date(), defaults, convert = dtf.Calendar.convert; + if (convert) { + defaults = convert.fromGregorian(result); + } + if (!convert) { + defaults = [result.getFullYear(), result.getMonth(), result.getDate()]; + } + if (year === null) { + year = defaults[0]; + } + else if (dtf.eras) { + year += dtf.eras[(era || 0) + 3]; + } + if (month === null) { + month = defaults[1]; + } + if (date === null) { + date = defaults[2]; + } + if (convert) { + result = convert.toGregorian(year, month, date); + if (result === null) return null; + } + else { + result.setFullYear(year, month, date); + if (result.getDate() !== date) return null; + if ((weekDay !== null) && (result.getDay() !== weekDay)) { + return null; + } + } + if (pmHour && (hour < 12)) { + hour += 12; + } + result.setHours(hour, min, sec, msec); + if (tzMinOffset !== null) { + var adjustedMin = result.getMinutes() - (tzMinOffset + result.getTimezoneOffset()); + result.setHours(result.getHours() + parseInt(adjustedMin/60, 10), adjustedMin%60); + } + return result; +} +Date.prototype.format = function Date$format(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture); +} +Date.prototype.localeFormat = function Date$localeFormat(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture); +} +Date.prototype._toFormattedString = function Date$_toFormattedString(format, cultureInfo) { + var dtf = cultureInfo.dateTimeFormat, + convert = dtf.Calendar.convert; + if (!format || !format.length || (format === 'i')) { + if (cultureInfo && cultureInfo.name.length) { + if (convert) { + return this._toFormattedString(dtf.FullDateTimePattern, cultureInfo); + } + else { + var eraDate = new Date(this.getTime()); + var era = Date._getEra(this, dtf.eras); + eraDate.setFullYear(Date._getEraYear(this, dtf, era)); + return eraDate.toLocaleString(); + } + } + else { + return this.toString(); + } + } + var eras = dtf.eras, + sortable = (format === "s"); + format = Date._expandFormat(dtf, format); + var ret = new Sys.StringBuilder(); + var hour; + function addLeadingZero(num) { + if (num < 10) { + return '0' + num; + } + return num.toString(); + } + function addLeadingZeros(num) { + if (num < 10) { + return '00' + num; + } + if (num < 100) { + return '0' + num; + } + return num.toString(); + } + function padYear(year) { + if (year < 10) { + return '000' + year; + } + else if (year < 100) { + return '00' + year; + } + else if (year < 1000) { + return '0' + year; + } + return year.toString(); + } + + var foundDay, checkedDay, dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g; + function hasDay() { + if (foundDay || checkedDay) { + return foundDay; + } + foundDay = dayPartRegExp.test(format); + checkedDay = true; + return foundDay; + } + + var quoteCount = 0, + tokenRegExp = Date._getTokenRegExp(), + converted; + if (!sortable && convert) { + converted = convert.fromGregorian(this); + } + for (;;) { + var index = tokenRegExp.lastIndex; + var ar = tokenRegExp.exec(format); + var preMatch = format.slice(index, ar ? ar.index : format.length); + quoteCount += Date._appendPreOrPostMatch(preMatch, ret); + if (!ar) break; + if ((quoteCount%2) === 1) { + ret.append(ar[0]); + continue; + } + + function getPart(date, part) { + if (converted) { + return converted[part]; + } + switch (part) { + case 0: return date.getFullYear(); + case 1: return date.getMonth(); + case 2: return date.getDate(); + } + } + switch (ar[0]) { + case "dddd": + ret.append(dtf.DayNames[this.getDay()]); + break; + case "ddd": + ret.append(dtf.AbbreviatedDayNames[this.getDay()]); + break; + case "dd": + foundDay = true; + ret.append(addLeadingZero(getPart(this, 2))); + break; + case "d": + foundDay = true; + ret.append(getPart(this, 2)); + break; + case "MMMM": + ret.append((dtf.MonthGenitiveNames && hasDay()) + ? dtf.MonthGenitiveNames[getPart(this, 1)] + : dtf.MonthNames[getPart(this, 1)]); + break; + case "MMM": + ret.append((dtf.AbbreviatedMonthGenitiveNames && hasDay()) + ? dtf.AbbreviatedMonthGenitiveNames[getPart(this, 1)] + : dtf.AbbreviatedMonthNames[getPart(this, 1)]); + break; + case "MM": + ret.append(addLeadingZero(getPart(this, 1) + 1)); + break; + case "M": + ret.append(getPart(this, 1) + 1); + break; + case "yyyy": + ret.append(padYear(converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable))); + break; + case "yy": + ret.append(addLeadingZero((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100)); + break; + case "y": + ret.append((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100); + break; + case "hh": + hour = this.getHours() % 12; + if (hour === 0) hour = 12; + ret.append(addLeadingZero(hour)); + break; + case "h": + hour = this.getHours() % 12; + if (hour === 0) hour = 12; + ret.append(hour); + break; + case "HH": + ret.append(addLeadingZero(this.getHours())); + break; + case "H": + ret.append(this.getHours()); + break; + case "mm": + ret.append(addLeadingZero(this.getMinutes())); + break; + case "m": + ret.append(this.getMinutes()); + break; + case "ss": + ret.append(addLeadingZero(this.getSeconds())); + break; + case "s": + ret.append(this.getSeconds()); + break; + case "tt": + ret.append((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator); + break; + case "t": + ret.append(((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator).charAt(0)); + break; + case "f": + ret.append(addLeadingZeros(this.getMilliseconds()).charAt(0)); + break; + case "ff": + ret.append(addLeadingZeros(this.getMilliseconds()).substr(0, 2)); + break; + case "fff": + ret.append(addLeadingZeros(this.getMilliseconds())); + break; + case "z": + hour = this.getTimezoneOffset() / 60; + ret.append(((hour <= 0) ? '+' : '-') + Math.floor(Math.abs(hour))); + break; + case "zz": + hour = this.getTimezoneOffset() / 60; + ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour)))); + break; + case "zzz": + hour = this.getTimezoneOffset() / 60; + ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))) + + ":" + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60))); + break; + case "g": + case "gg": + if (dtf.eras) { + ret.append(dtf.eras[Date._getEra(this, eras) + 1]); + } + break; + case "/": + ret.append(dtf.DateSeparator); + break; + default: + Sys.Debug.fail("Invalid date format pattern"); + } + } + return ret.toString(); +} +String.localeFormat = function String$localeFormat(format, args) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String}, + {name: "args", mayBeNull: true, parameterArray: true} + ]); + if (e) throw e; + return String._toFormattedString(true, arguments); +} +Number.parseLocale = function Number$parseLocale(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ], false); + if (e) throw e; + return Number._parse(value, Sys.CultureInfo.CurrentCulture); +} +Number.parseInvariant = function Number$parseInvariant(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ], false); + if (e) throw e; + return Number._parse(value, Sys.CultureInfo.InvariantCulture); +} +Number._parse = function Number$_parse(value, cultureInfo) { + value = value.trim(); + + if (value.match(/^[+-]?infinity$/i)) { + return parseFloat(value); + } + if (value.match(/^0x[a-f0-9]+$/i)) { + return parseInt(value); + } + var numFormat = cultureInfo.numberFormat; + var signInfo = Number._parseNumberNegativePattern(value, numFormat, numFormat.NumberNegativePattern); + var sign = signInfo[0]; + var num = signInfo[1]; + + if ((sign === '') && (numFormat.NumberNegativePattern !== 1)) { + signInfo = Number._parseNumberNegativePattern(value, numFormat, 1); + sign = signInfo[0]; + num = signInfo[1]; + } + if (sign === '') sign = '+'; + + var exponent; + var intAndFraction; + var exponentPos = num.indexOf('e'); + if (exponentPos < 0) exponentPos = num.indexOf('E'); + if (exponentPos < 0) { + intAndFraction = num; + exponent = null; + } + else { + intAndFraction = num.substr(0, exponentPos); + exponent = num.substr(exponentPos + 1); + } + + var integer; + var fraction; + var decimalPos = intAndFraction.indexOf(numFormat.NumberDecimalSeparator); + if (decimalPos < 0) { + integer = intAndFraction; + fraction = null; + } + else { + integer = intAndFraction.substr(0, decimalPos); + fraction = intAndFraction.substr(decimalPos + numFormat.NumberDecimalSeparator.length); + } + + integer = integer.split(numFormat.NumberGroupSeparator).join(''); + var altNumGroupSeparator = numFormat.NumberGroupSeparator.replace(/\u00A0/g, " "); + if (numFormat.NumberGroupSeparator !== altNumGroupSeparator) { + integer = integer.split(altNumGroupSeparator).join(''); + } + + var p = sign + integer; + if (fraction !== null) { + p += '.' + fraction; + } + if (exponent !== null) { + var expSignInfo = Number._parseNumberNegativePattern(exponent, numFormat, 1); + if (expSignInfo[0] === '') { + expSignInfo[0] = '+'; + } + p += 'e' + expSignInfo[0] + expSignInfo[1]; + } + if (p.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/)) { + return parseFloat(p); + } + return Number.NaN; +} +Number._parseNumberNegativePattern = function Number$_parseNumberNegativePattern(value, numFormat, numberNegativePattern) { + var neg = numFormat.NegativeSign; + var pos = numFormat.PositiveSign; + switch (numberNegativePattern) { + case 4: + neg = ' ' + neg; + pos = ' ' + pos; + case 3: + if (value.endsWith(neg)) { + return ['-', value.substr(0, value.length - neg.length)]; + } + else if (value.endsWith(pos)) { + return ['+', value.substr(0, value.length - pos.length)]; + } + break; + case 2: + neg += ' '; + pos += ' '; + case 1: + if (value.startsWith(neg)) { + return ['-', value.substr(neg.length)]; + } + else if (value.startsWith(pos)) { + return ['+', value.substr(pos.length)]; + } + break; + case 0: + if (value.startsWith('(') && value.endsWith(')')) { + return ['-', value.substr(1, value.length - 2)]; + } + break; + default: + Sys.Debug.fail(""); + } + return ['', value]; +} +Number.prototype.format = function Number$format(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture); +} +Number.prototype.localeFormat = function Number$localeFormat(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture); +} +Number.prototype._toFormattedString = function Number$_toFormattedString(format, cultureInfo) { + if (!format || (format.length === 0) || (format === 'i')) { + if (cultureInfo && (cultureInfo.name.length > 0)) { + return this.toLocaleString(); + } + else { + return this.toString(); + } + } + + var _percentPositivePattern = ["n %", "n%", "%n" ]; + var _percentNegativePattern = ["-n %", "-n%", "-%n"]; + var _numberNegativePattern = ["(n)","-n","- n","n-","n -"]; + var _currencyPositivePattern = ["$n","n$","$ n","n $"]; + var _currencyNegativePattern = ["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"]; + function zeroPad(str, count, left) { + for (var l=str.length; l < count; l++) { + str = (left ? ('0' + str) : (str + '0')); + } + return str; + } + + function expandNumber(number, precision, groupSizes, sep, decimalChar) { + Sys.Debug.assert(groupSizes.length > 0, "groupSizes must be an array of at least 1"); + var curSize = groupSizes[0]; + var curGroupIndex = 1; + var factor = Math.pow(10, precision); + var rounded = (Math.round(number * factor) / factor); + if (!isFinite(rounded)) { + rounded = number; + } + number = rounded; + + var numberString = number.toString(); + var right = ""; + var exponent; + + + var split = numberString.split(/e/i); + numberString = split[0]; + exponent = (split.length > 1 ? parseInt(split[1]) : 0); + split = numberString.split('.'); + numberString = split[0]; + right = split.length > 1 ? split[1] : ""; + + var l; + if (exponent > 0) { + right = zeroPad(right, exponent, false); + numberString += right.slice(0, exponent); + right = right.substr(exponent); + } + else if (exponent < 0) { + exponent = -exponent; + numberString = zeroPad(numberString, exponent+1, true); + right = numberString.slice(-exponent, numberString.length) + right; + numberString = numberString.slice(0, -exponent); + } + if (precision > 0) { + if (right.length > precision) { + right = right.slice(0, precision); + } + else { + right = zeroPad(right, precision, false); + } + right = decimalChar + right; + } + else { + right = ""; + } + var stringIndex = numberString.length-1; + var ret = ""; + while (stringIndex >= 0) { + if (curSize === 0 || curSize > stringIndex) { + if (ret.length > 0) + return numberString.slice(0, stringIndex + 1) + sep + ret + right; + else + return numberString.slice(0, stringIndex + 1) + right; + } + if (ret.length > 0) + ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1) + sep + ret; + else + ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1); + stringIndex -= curSize; + if (curGroupIndex < groupSizes.length) { + curSize = groupSizes[curGroupIndex]; + curGroupIndex++; + } + } + return numberString.slice(0, stringIndex + 1) + sep + ret + right; + } + var nf = cultureInfo.numberFormat; + var number = Math.abs(this); + if (!format) + format = "D"; + var precision = -1; + if (format.length > 1) precision = parseInt(format.slice(1), 10); + var pattern; + switch (format.charAt(0)) { + case "d": + case "D": + pattern = 'n'; + if (precision !== -1) { + number = zeroPad(""+number, precision, true); + } + if (this < 0) number = -number; + break; + case "c": + case "C": + if (this < 0) pattern = _currencyNegativePattern[nf.CurrencyNegativePattern]; + else pattern = _currencyPositivePattern[nf.CurrencyPositivePattern]; + if (precision === -1) precision = nf.CurrencyDecimalDigits; + number = expandNumber(Math.abs(this), precision, nf.CurrencyGroupSizes, nf.CurrencyGroupSeparator, nf.CurrencyDecimalSeparator); + break; + case "n": + case "N": + if (this < 0) pattern = _numberNegativePattern[nf.NumberNegativePattern]; + else pattern = 'n'; + if (precision === -1) precision = nf.NumberDecimalDigits; + number = expandNumber(Math.abs(this), precision, nf.NumberGroupSizes, nf.NumberGroupSeparator, nf.NumberDecimalSeparator); + break; + case "p": + case "P": + if (this < 0) pattern = _percentNegativePattern[nf.PercentNegativePattern]; + else pattern = _percentPositivePattern[nf.PercentPositivePattern]; + if (precision === -1) precision = nf.PercentDecimalDigits; + number = expandNumber(Math.abs(this) * 100, precision, nf.PercentGroupSizes, nf.PercentGroupSeparator, nf.PercentDecimalSeparator); + break; + default: + throw Error.format(Sys.Res.formatBadFormatSpecifier); + } + var regex = /n|\$|-|%/g; + var ret = ""; + for (;;) { + var index = regex.lastIndex; + var ar = regex.exec(pattern); + ret += pattern.slice(index, ar ? ar.index : pattern.length); + if (!ar) + break; + switch (ar[0]) { + case "n": + ret += number; + break; + case "$": + ret += nf.CurrencySymbol; + break; + case "-": + if (/[1-9]/.test(number)) { + ret += nf.NegativeSign; + } + break; + case "%": + ret += nf.PercentSymbol; + break; + default: + Sys.Debug.fail("Invalid number format pattern"); + } + } + return ret; +} + +Sys.CultureInfo = function Sys$CultureInfo(name, numberFormat, dateTimeFormat) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "name", type: String}, + {name: "numberFormat", type: Object}, + {name: "dateTimeFormat", type: Object} + ]); + if (e) throw e; + this.name = name; + this.numberFormat = numberFormat; + this.dateTimeFormat = dateTimeFormat; +} + function Sys$CultureInfo$_getDateTimeFormats() { + if (! this._dateTimeFormats) { + var dtf = this.dateTimeFormat; + this._dateTimeFormats = + [ dtf.MonthDayPattern, + dtf.YearMonthPattern, + dtf.ShortDatePattern, + dtf.ShortTimePattern, + dtf.LongDatePattern, + dtf.LongTimePattern, + dtf.FullDateTimePattern, + dtf.RFC1123Pattern, + dtf.SortableDateTimePattern, + dtf.UniversalSortableDateTimePattern ]; + } + return this._dateTimeFormats; + } + function Sys$CultureInfo$_getIndex(value, a1, a2) { + var upper = this._toUpper(value), + i = Array.indexOf(a1, upper); + if (i === -1) { + i = Array.indexOf(a2, upper); + } + return i; + } + function Sys$CultureInfo$_getMonthIndex(value) { + if (!this._upperMonths) { + this._upperMonths = this._toUpperArray(this.dateTimeFormat.MonthNames); + this._upperMonthsGenitive = this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames); + } + return this._getIndex(value, this._upperMonths, this._upperMonthsGenitive); + } + function Sys$CultureInfo$_getAbbrMonthIndex(value) { + if (!this._upperAbbrMonths) { + this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames); + this._upperAbbrMonthsGenitive = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames); + } + return this._getIndex(value, this._upperAbbrMonths, this._upperAbbrMonthsGenitive); + } + function Sys$CultureInfo$_getDayIndex(value) { + if (!this._upperDays) { + this._upperDays = this._toUpperArray(this.dateTimeFormat.DayNames); + } + return Array.indexOf(this._upperDays, this._toUpper(value)); + } + function Sys$CultureInfo$_getAbbrDayIndex(value) { + if (!this._upperAbbrDays) { + this._upperAbbrDays = this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames); + } + return Array.indexOf(this._upperAbbrDays, this._toUpper(value)); + } + function Sys$CultureInfo$_toUpperArray(arr) { + var result = []; + for (var i = 0, il = arr.length; i < il; i++) { + result[i] = this._toUpper(arr[i]); + } + return result; + } + function Sys$CultureInfo$_toUpper(value) { + return value.split("\u00A0").join(' ').toUpperCase(); + } +Sys.CultureInfo.prototype = { + _getDateTimeFormats: Sys$CultureInfo$_getDateTimeFormats, + _getIndex: Sys$CultureInfo$_getIndex, + _getMonthIndex: Sys$CultureInfo$_getMonthIndex, + _getAbbrMonthIndex: Sys$CultureInfo$_getAbbrMonthIndex, + _getDayIndex: Sys$CultureInfo$_getDayIndex, + _getAbbrDayIndex: Sys$CultureInfo$_getAbbrDayIndex, + _toUpperArray: Sys$CultureInfo$_toUpperArray, + _toUpper: Sys$CultureInfo$_toUpper +} +Sys.CultureInfo.registerClass('Sys.CultureInfo'); +Sys.CultureInfo._parse = function Sys$CultureInfo$_parse(value) { + var dtf = value.dateTimeFormat; + if (dtf && !dtf.eras) { + dtf.eras = value.eras; + } + return new Sys.CultureInfo(value.name, value.numberFormat, dtf); +} +Sys.CultureInfo.InvariantCulture = Sys.CultureInfo._parse({"name":"","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"\u00A4","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"MM/dd/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"yyyy MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]}); +if (typeof(__cultureInfo) === "object") { + Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(__cultureInfo); + delete __cultureInfo; +} +else { + Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse({"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm tt","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"MMMM, yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":false,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]}); +} +Type.registerNamespace('Sys.Serialization'); +Sys.Serialization.JavaScriptSerializer = function Sys$Serialization$JavaScriptSerializer() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); +} +Sys.Serialization.JavaScriptSerializer.registerClass('Sys.Serialization.JavaScriptSerializer'); +Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs = []; +Sys.Serialization.JavaScriptSerializer._charsToEscape = []; +Sys.Serialization.JavaScriptSerializer._dateRegEx = new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"', 'g'); +Sys.Serialization.JavaScriptSerializer._escapeChars = {}; +Sys.Serialization.JavaScriptSerializer._escapeRegEx = new RegExp('["\\\\\\x00-\\x1F]', 'i'); +Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal = new RegExp('["\\\\\\x00-\\x1F]', 'g'); +Sys.Serialization.JavaScriptSerializer._jsonRegEx = new RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g'); +Sys.Serialization.JavaScriptSerializer._jsonStringRegEx = new RegExp('"(\\\\.|[^"\\\\])*"', 'g'); +Sys.Serialization.JavaScriptSerializer._serverTypeFieldName = '__type'; +Sys.Serialization.JavaScriptSerializer._init = function Sys$Serialization$JavaScriptSerializer$_init() { + var replaceChars = ['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007', + '\\b','\\t','\\n','\\u000b','\\f','\\r','\\u000e','\\u000f','\\u0010','\\u0011', + '\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019', + '\\u001a','\\u001b','\\u001c','\\u001d','\\u001e','\\u001f']; + Sys.Serialization.JavaScriptSerializer._charsToEscape[0] = '\\'; + Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\\'] = new RegExp('\\\\', 'g'); + Sys.Serialization.JavaScriptSerializer._escapeChars['\\'] = '\\\\'; + Sys.Serialization.JavaScriptSerializer._charsToEscape[1] = '"'; + Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"'] = new RegExp('"', 'g'); + Sys.Serialization.JavaScriptSerializer._escapeChars['"'] = '\\"'; + for (var i = 0; i < 32; i++) { + var c = String.fromCharCode(i); + Sys.Serialization.JavaScriptSerializer._charsToEscape[i+2] = c; + Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c] = new RegExp(c, 'g'); + Sys.Serialization.JavaScriptSerializer._escapeChars[c] = replaceChars[i]; + } +} +Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeBooleanWithBuilder(object, stringBuilder) { + stringBuilder.append(object.toString()); +} +Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeNumberWithBuilder(object, stringBuilder) { + if (isFinite(object)) { + stringBuilder.append(String(object)); + } + else { + throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers); + } +} +Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeStringWithBuilder(string, stringBuilder) { + stringBuilder.append('"'); + if (Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(string)) { + if (Sys.Serialization.JavaScriptSerializer._charsToEscape.length === 0) { + Sys.Serialization.JavaScriptSerializer._init(); + } + if (string.length < 128) { + string = string.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal, + function(x) { return Sys.Serialization.JavaScriptSerializer._escapeChars[x]; }); + } + else { + for (var i = 0; i < 34; i++) { + var c = Sys.Serialization.JavaScriptSerializer._charsToEscape[i]; + if (string.indexOf(c) !== -1) { + if (Sys.Browser.agent === Sys.Browser.Opera || Sys.Browser.agent === Sys.Browser.FireFox) { + string = string.split(c).join(Sys.Serialization.JavaScriptSerializer._escapeChars[c]); + } + else { + string = string.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c], + Sys.Serialization.JavaScriptSerializer._escapeChars[c]); + } + } + } + } + } + stringBuilder.append(string); + stringBuilder.append('"'); +} +Sys.Serialization.JavaScriptSerializer._serializeWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeWithBuilder(object, stringBuilder, sort, prevObjects) { + var i; + switch (typeof object) { + case 'object': + if (object) { + if (prevObjects){ + for( var j = 0; j < prevObjects.length; j++) { + if (prevObjects[j] === object) { + throw Error.invalidOperation(Sys.Res.cannotSerializeObjectWithCycle); + } + } + } + else { + prevObjects = new Array(); + } + try { + Array.add(prevObjects, object); + + if (Number.isInstanceOfType(object)){ + Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object, stringBuilder); + } + else if (Boolean.isInstanceOfType(object)){ + Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(object, stringBuilder); + } + else if (String.isInstanceOfType(object)){ + Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object, stringBuilder); + } + + else if (Array.isInstanceOfType(object)) { + stringBuilder.append('['); + + for (i = 0; i < object.length; ++i) { + if (i > 0) { + stringBuilder.append(','); + } + Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object[i], stringBuilder,false,prevObjects); + } + stringBuilder.append(']'); + } + else { + if (Date.isInstanceOfType(object)) { + stringBuilder.append('"\\/Date('); + stringBuilder.append(object.getTime()); + stringBuilder.append(')\\/"'); + break; + } + var properties = []; + var propertyCount = 0; + for (var name in object) { + if (name.startsWith('$')) { + continue; + } + if (name === Sys.Serialization.JavaScriptSerializer._serverTypeFieldName && propertyCount !== 0){ + properties[propertyCount++] = properties[0]; + properties[0] = name; + } + else{ + properties[propertyCount++] = name; + } + } + if (sort) properties.sort(); + stringBuilder.append('{'); + var needComma = false; + + for (i=0; i + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", mayBeNull: true} + ]); + if (e) throw e; + var stringBuilder = new Sys.StringBuilder(); + Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object, stringBuilder, false); + return stringBuilder.toString(); +} +Sys.Serialization.JavaScriptSerializer.deserialize = function Sys$Serialization$JavaScriptSerializer$deserialize(data, secure) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "data", type: String}, + {name: "secure", type: Boolean, optional: true} + ]); + if (e) throw e; + + if (data.length === 0) throw Error.argument('data', Sys.Res.cannotDeserializeEmptyString); + try { + var exp = data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx, "$1new Date($2)"); + + if (secure && Sys.Serialization.JavaScriptSerializer._jsonRegEx.test( + exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx, ''))) throw null; + return eval('(' + exp + ')'); + } + catch (e) { + throw Error.argument('data', Sys.Res.cannotDeserializeInvalidJson); + } +} +Type.registerNamespace('Sys.UI'); + +Sys.EventHandlerList = function Sys$EventHandlerList() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._list = {}; +} + function Sys$EventHandlerList$_addHandler(id, handler) { + Array.add(this._getEvent(id, true), handler); + } + function Sys$EventHandlerList$addHandler(id, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + this._addHandler(id, handler); + } + function Sys$EventHandlerList$_removeHandler(id, handler) { + var evt = this._getEvent(id); + if (!evt) return; + Array.remove(evt, handler); + } + function Sys$EventHandlerList$removeHandler(id, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + this._removeHandler(id, handler); + } + function Sys$EventHandlerList$getHandler(id) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String} + ]); + if (e) throw e; + var evt = this._getEvent(id); + if (!evt || (evt.length === 0)) return null; + evt = Array.clone(evt); + return function(source, args) { + for (var i = 0, l = evt.length; i < l; i++) { + evt[i](source, args); + } + }; + } + function Sys$EventHandlerList$_getEvent(id, create) { + if (!this._list[id]) { + if (!create) return null; + this._list[id] = []; + } + return this._list[id]; + } +Sys.EventHandlerList.prototype = { + _addHandler: Sys$EventHandlerList$_addHandler, + addHandler: Sys$EventHandlerList$addHandler, + _removeHandler: Sys$EventHandlerList$_removeHandler, + removeHandler: Sys$EventHandlerList$removeHandler, + getHandler: Sys$EventHandlerList$getHandler, + _getEvent: Sys$EventHandlerList$_getEvent +} +Sys.EventHandlerList.registerClass('Sys.EventHandlerList'); +Sys.CommandEventArgs = function Sys$CommandEventArgs(commandName, commandArgument, commandSource) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "commandName", type: String}, + {name: "commandArgument", mayBeNull: true}, + {name: "commandSource", mayBeNull: true} + ]); + if (e) throw e; + Sys.CommandEventArgs.initializeBase(this); + this._commandName = commandName; + this._commandArgument = commandArgument; + this._commandSource = commandSource; +} + function Sys$CommandEventArgs$get_commandName() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._commandName; + } + function Sys$CommandEventArgs$get_commandArgument() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._commandArgument; + } + function Sys$CommandEventArgs$get_commandSource() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._commandSource; + } +Sys.CommandEventArgs.prototype = { + _commandName: null, + _commandArgument: null, + _commandSource: null, + get_commandName: Sys$CommandEventArgs$get_commandName, + get_commandArgument: Sys$CommandEventArgs$get_commandArgument, + get_commandSource: Sys$CommandEventArgs$get_commandSource +} +Sys.CommandEventArgs.registerClass("Sys.CommandEventArgs", Sys.CancelEventArgs); + +Sys.INotifyPropertyChange = function Sys$INotifyPropertyChange() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} + function Sys$INotifyPropertyChange$add_propertyChanged(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$INotifyPropertyChange$remove_propertyChanged(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } +Sys.INotifyPropertyChange.prototype = { + add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged, + remove_propertyChanged: Sys$INotifyPropertyChange$remove_propertyChanged +} +Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange'); + +Sys.PropertyChangedEventArgs = function Sys$PropertyChangedEventArgs(propertyName) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "propertyName", type: String} + ]); + if (e) throw e; + Sys.PropertyChangedEventArgs.initializeBase(this); + this._propertyName = propertyName; +} + + function Sys$PropertyChangedEventArgs$get_propertyName() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._propertyName; + } +Sys.PropertyChangedEventArgs.prototype = { + get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName +} +Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs', Sys.EventArgs); + +Sys.INotifyDisposing = function Sys$INotifyDisposing() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} + function Sys$INotifyDisposing$add_disposing(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$INotifyDisposing$remove_disposing(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } +Sys.INotifyDisposing.prototype = { + add_disposing: Sys$INotifyDisposing$add_disposing, + remove_disposing: Sys$INotifyDisposing$remove_disposing +} +Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing"); + +Sys.Component = function Sys$Component() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (Sys.Application) Sys.Application.registerDisposableObject(this); +} + function Sys$Component$get_events() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._events) { + this._events = new Sys.EventHandlerList(); + } + return this._events; + } + function Sys$Component$get_id() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._id; + } + function Sys$Component$set_id(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + if (this._idSet) throw Error.invalidOperation(Sys.Res.componentCantSetIdTwice); + this._idSet = true; + var oldId = this.get_id(); + if (oldId && Sys.Application.findComponent(oldId)) throw Error.invalidOperation(Sys.Res.componentCantSetIdAfterAddedToApp); + this._id = value; + } + function Sys$Component$get_isInitialized() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._initialized; + } + function Sys$Component$get_isUpdating() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._updating; + } + function Sys$Component$add_disposing(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("disposing", handler); + } + function Sys$Component$remove_disposing(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("disposing", handler); + } + function Sys$Component$add_propertyChanged(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("propertyChanged", handler); + } + function Sys$Component$remove_propertyChanged(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("propertyChanged", handler); + } + function Sys$Component$beginUpdate() { + this._updating = true; + } + function Sys$Component$dispose() { + if (this._events) { + var handler = this._events.getHandler("disposing"); + if (handler) { + handler(this, Sys.EventArgs.Empty); + } + } + delete this._events; + Sys.Application.unregisterDisposableObject(this); + Sys.Application.removeComponent(this); + } + function Sys$Component$endUpdate() { + this._updating = false; + if (!this._initialized) this.initialize(); + this.updated(); + } + function Sys$Component$initialize() { + this._initialized = true; + } + function Sys$Component$raisePropertyChanged(propertyName) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "propertyName", type: String} + ]); + if (e) throw e; + if (!this._events) return; + var handler = this._events.getHandler("propertyChanged"); + if (handler) { + handler(this, new Sys.PropertyChangedEventArgs(propertyName)); + } + } + function Sys$Component$updated() { + } +Sys.Component.prototype = { + _id: null, + _idSet: false, + _initialized: false, + _updating: false, + get_events: Sys$Component$get_events, + get_id: Sys$Component$get_id, + set_id: Sys$Component$set_id, + get_isInitialized: Sys$Component$get_isInitialized, + get_isUpdating: Sys$Component$get_isUpdating, + add_disposing: Sys$Component$add_disposing, + remove_disposing: Sys$Component$remove_disposing, + add_propertyChanged: Sys$Component$add_propertyChanged, + remove_propertyChanged: Sys$Component$remove_propertyChanged, + beginUpdate: Sys$Component$beginUpdate, + dispose: Sys$Component$dispose, + endUpdate: Sys$Component$endUpdate, + initialize: Sys$Component$initialize, + raisePropertyChanged: Sys$Component$raisePropertyChanged, + updated: Sys$Component$updated +} +Sys.Component.registerClass('Sys.Component', null, Sys.IDisposable, Sys.INotifyPropertyChange, Sys.INotifyDisposing); +function Sys$Component$_setProperties(target, properties) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "properties"} + ]); + if (e) throw e; + var current; + var targetType = Object.getType(target); + var isObject = (targetType === Object) || (targetType === Sys.UI.DomElement); + var isComponent = Sys.Component.isInstanceOfType(target) && !target.get_isUpdating(); + if (isComponent) target.beginUpdate(); + for (var name in properties) { + var val = properties[name]; + var getter = isObject ? null : target["get_" + name]; + if (isObject || typeof(getter) !== 'function') { + var targetVal = target[name]; + if (!isObject && typeof(targetVal) === 'undefined') throw Error.invalidOperation(String.format(Sys.Res.propertyUndefined, name)); + if (!val || (typeof(val) !== 'object') || (isObject && !targetVal)) { + target[name] = val; + } + else { + Sys$Component$_setProperties(targetVal, val); + } + } + else { + var setter = target["set_" + name]; + if (typeof(setter) === 'function') { + setter.apply(target, [val]); + } + else if (val instanceof Array) { + current = getter.apply(target); + if (!(current instanceof Array)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNotAnArray, name)); + for (var i = 0, j = current.length, l= val.length; i < l; i++, j++) { + current[j] = val[i]; + } + } + else if ((typeof(val) === 'object') && (Object.getType(val) === Object)) { + current = getter.apply(target); + if ((typeof(current) === 'undefined') || (current === null)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNullOrUndefined, name)); + Sys$Component$_setProperties(current, val); + } + else { + throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name)); + } + } + } + if (isComponent) target.endUpdate(); +} +function Sys$Component$_setReferences(component, references) { + for (var name in references) { + var setter = component["set_" + name]; + var reference = $find(references[name]); + if (typeof(setter) !== 'function') throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name)); + if (!reference) throw Error.invalidOperation(String.format(Sys.Res.referenceNotFound, references[name])); + setter.apply(component, [reference]); + } +} +var $create = Sys.Component.create = function Sys$Component$create(type, properties, events, references, element) { + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", type: Type}, + {name: "properties", mayBeNull: true, optional: true}, + {name: "events", mayBeNull: true, optional: true}, + {name: "references", mayBeNull: true, optional: true}, + {name: "element", mayBeNull: true, domElement: true, optional: true} + ]); + if (e) throw e; + if (!type.inheritsFrom(Sys.Component)) { + throw Error.argument('type', String.format(Sys.Res.createNotComponent, type.getName())); + } + if (type.inheritsFrom(Sys.UI.Behavior) || type.inheritsFrom(Sys.UI.Control)) { + if (!element) throw Error.argument('element', Sys.Res.createNoDom); + } + else if (element) throw Error.argument('element', Sys.Res.createComponentOnDom); + var component = (element ? new type(element): new type()); + var app = Sys.Application; + var creatingComponents = app.get_isCreatingComponents(); + component.beginUpdate(); + if (properties) { + Sys$Component$_setProperties(component, properties); + } + if (events) { + for (var name in events) { + if (!(component["add_" + name] instanceof Function)) throw new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name)); + if (!(events[name] instanceof Function)) throw new Error.invalidOperation(Sys.Res.eventHandlerNotFunction); + component["add_" + name](events[name]); + } + } + if (component.get_id()) { + app.addComponent(component); + } + if (creatingComponents) { + app._createdComponents[app._createdComponents.length] = component; + if (references) { + app._addComponentToSecondPass(component, references); + } + else { + component.endUpdate(); + } + } + else { + if (references) { + Sys$Component$_setReferences(component, references); + } + component.endUpdate(); + } + return component; +} + +Sys.UI.MouseButton = function Sys$UI$MouseButton() { + /// + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.MouseButton.prototype = { + leftButton: 0, + middleButton: 1, + rightButton: 2 +} +Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton"); + +Sys.UI.Key = function Sys$UI$Key() { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.Key.prototype = { + backspace: 8, + tab: 9, + enter: 13, + esc: 27, + space: 32, + pageUp: 33, + pageDown: 34, + end: 35, + home: 36, + left: 37, + up: 38, + right: 39, + down: 40, + del: 127 +} +Sys.UI.Key.registerEnum("Sys.UI.Key"); + +Sys.UI.Point = function Sys$UI$Point(x, y) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "x", type: Number, integer: true}, + {name: "y", type: Number, integer: true} + ]); + if (e) throw e; + this.x = x; + this.y = y; +} +Sys.UI.Point.registerClass('Sys.UI.Point'); + +Sys.UI.Bounds = function Sys$UI$Bounds(x, y, width, height) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "x", type: Number, integer: true}, + {name: "y", type: Number, integer: true}, + {name: "width", type: Number, integer: true}, + {name: "height", type: Number, integer: true} + ]); + if (e) throw e; + this.x = x; + this.y = y; + this.height = height; + this.width = width; +} +Sys.UI.Bounds.registerClass('Sys.UI.Bounds'); + +Sys.UI.DomEvent = function Sys$UI$DomEvent(eventObject) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventObject"} + ]); + if (e) throw e; + var ev = eventObject; + var etype = this.type = ev.type.toLowerCase(); + this.rawEvent = ev; + this.altKey = ev.altKey; + if (typeof(ev.button) !== 'undefined') { + this.button = (typeof(ev.which) !== 'undefined') ? ev.button : + (ev.button === 4) ? Sys.UI.MouseButton.middleButton : + (ev.button === 2) ? Sys.UI.MouseButton.rightButton : + Sys.UI.MouseButton.leftButton; + } + if (etype === 'keypress') { + this.charCode = ev.charCode || ev.keyCode; + } + else if (ev.keyCode && (ev.keyCode === 46)) { + this.keyCode = 127; + } + else { + this.keyCode = ev.keyCode; + } + this.clientX = ev.clientX; + this.clientY = ev.clientY; + this.ctrlKey = ev.ctrlKey; + this.target = ev.target ? ev.target : ev.srcElement; + if (!etype.startsWith('key')) { + if ((typeof(ev.offsetX) !== 'undefined') && (typeof(ev.offsetY) !== 'undefined')) { + this.offsetX = ev.offsetX; + this.offsetY = ev.offsetY; + } + else if (this.target && (this.target.nodeType !== 3) && (typeof(ev.clientX) === 'number')) { + var loc = Sys.UI.DomElement.getLocation(this.target); + var w = Sys.UI.DomElement._getWindow(this.target); + this.offsetX = (w.pageXOffset || 0) + ev.clientX - loc.x; + this.offsetY = (w.pageYOffset || 0) + ev.clientY - loc.y; + } + } + this.screenX = ev.screenX; + this.screenY = ev.screenY; + this.shiftKey = ev.shiftKey; +} + function Sys$UI$DomEvent$preventDefault() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this.rawEvent.preventDefault) { + this.rawEvent.preventDefault(); + } + else if (window.event) { + this.rawEvent.returnValue = false; + } + } + function Sys$UI$DomEvent$stopPropagation() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this.rawEvent.stopPropagation) { + this.rawEvent.stopPropagation(); + } + else if (window.event) { + this.rawEvent.cancelBubble = true; + } + } +Sys.UI.DomEvent.prototype = { + preventDefault: Sys$UI$DomEvent$preventDefault, + stopPropagation: Sys$UI$DomEvent$stopPropagation +} +Sys.UI.DomEvent.registerClass('Sys.UI.DomEvent'); +var $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler, autoRemove) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "eventName", type: String}, + {name: "handler", type: Function}, + {name: "autoRemove", type: Boolean, optional: true} + ]); + if (e) throw e; + Sys.UI.DomEvent._ensureDomNode(element); + if (eventName === "error") throw Error.invalidOperation(Sys.Res.addHandlerCantBeUsedForError); + if (!element._events) { + element._events = {}; + } + var eventCache = element._events[eventName]; + if (!eventCache) { + element._events[eventName] = eventCache = []; + } + var browserHandler; + if (element.addEventListener) { + browserHandler = function(e) { + return handler.call(element, new Sys.UI.DomEvent(e)); + } + element.addEventListener(eventName, browserHandler, false); + } + else if (element.attachEvent) { + browserHandler = function() { + var e = {}; + try {e = Sys.UI.DomElement._getWindow(element).event} catch(ex) {} + return handler.call(element, new Sys.UI.DomEvent(e)); + } + element.attachEvent('on' + eventName, browserHandler); + } + eventCache[eventCache.length] = {handler: handler, browserHandler: browserHandler, autoRemove: autoRemove }; + if (autoRemove) { + var d = element.dispose; + if (d !== Sys.UI.DomEvent._disposeHandlers) { + element.dispose = Sys.UI.DomEvent._disposeHandlers; + if (typeof(d) !== "undefined") { + element._chainDispose = d; + } + } + } +} +var $addHandlers = Sys.UI.DomEvent.addHandlers = function Sys$UI$DomEvent$addHandlers(element, events, handlerOwner, autoRemove) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "events", type: Object}, + {name: "handlerOwner", optional: true}, + {name: "autoRemove", type: Boolean, optional: true} + ]); + if (e) throw e; + Sys.UI.DomEvent._ensureDomNode(element); + for (var name in events) { + var handler = events[name]; + if (typeof(handler) !== 'function') throw Error.invalidOperation(Sys.Res.cantAddNonFunctionhandler); + if (handlerOwner) { + handler = Function.createDelegate(handlerOwner, handler); + } + $addHandler(element, name, handler, autoRemove || false); + } +} +var $clearHandlers = Sys.UI.DomEvent.clearHandlers = function Sys$UI$DomEvent$clearHandlers(element) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"} + ]); + if (e) throw e; + Sys.UI.DomEvent._ensureDomNode(element); + Sys.UI.DomEvent._clearHandlers(element, false); +} +Sys.UI.DomEvent._clearHandlers = function Sys$UI$DomEvent$_clearHandlers(element, autoRemoving) { + if (element._events) { + var cache = element._events; + for (var name in cache) { + var handlers = cache[name]; + for (var i = handlers.length - 1; i >= 0; i--) { + var entry = handlers[i]; + if (!autoRemoving || entry.autoRemove) { + $removeHandler(element, name, entry.handler); + } + } + } + element._events = null; + } +} +Sys.UI.DomEvent._disposeHandlers = function Sys$UI$DomEvent$_disposeHandlers() { + Sys.UI.DomEvent._clearHandlers(this, true); + var d = this._chainDispose, type = typeof(d); + if (type !== "undefined") { + this.dispose = d; + this._chainDispose = null; + if (type === "function") { + this.dispose(); + } + } +} +var $removeHandler = Sys.UI.DomEvent.removeHandler = function Sys$UI$DomEvent$removeHandler(element, eventName, handler) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.UI.DomEvent._removeHandler(element, eventName, handler); +} +Sys.UI.DomEvent._removeHandler = function Sys$UI$DomEvent$_removeHandler(element, eventName, handler) { + Sys.UI.DomEvent._ensureDomNode(element); + var browserHandler = null; + if ((typeof(element._events) !== 'object') || !element._events) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid); + var cache = element._events[eventName]; + if (!(cache instanceof Array)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid); + for (var i = 0, l = cache.length; i < l; i++) { + if (cache[i].handler === handler) { + browserHandler = cache[i].browserHandler; + break; + } + } + if (typeof(browserHandler) !== 'function') throw Error.invalidOperation(Sys.Res.eventHandlerInvalid); + if (element.removeEventListener) { + element.removeEventListener(eventName, browserHandler, false); + } + else if (element.detachEvent) { + element.detachEvent('on' + eventName, browserHandler); + } + cache.splice(i, 1); +} +Sys.UI.DomEvent._ensureDomNode = function Sys$UI$DomEvent$_ensureDomNode(element) { + if (element.tagName && (element.tagName.toUpperCase() === "SCRIPT")) return; + + var doc = element.ownerDocument || element.document || element; + if ((typeof(element.document) !== 'object') && (element != doc) && (typeof(element.nodeType) !== 'number')) { + throw Error.argument("element", Sys.Res.argumentDomNode); + } +} + +Sys.UI.DomElement = function Sys$UI$DomElement() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.DomElement.registerClass('Sys.UI.DomElement'); +Sys.UI.DomElement.addCssClass = function Sys$UI$DomElement$addCssClass(element, className) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + if (!Sys.UI.DomElement.containsCssClass(element, className)) { + if (element.className === '') { + element.className = className; + } + else { + element.className += ' ' + className; + } + } +} +Sys.UI.DomElement.containsCssClass = function Sys$UI$DomElement$containsCssClass(element, className) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + return Array.contains(element.className.split(' '), className); +} +Sys.UI.DomElement.getBounds = function Sys$UI$DomElement$getBounds(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + var offset = Sys.UI.DomElement.getLocation(element); + return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || 0, element.offsetHeight || 0); +} +var $get = Sys.UI.DomElement.getElementById = function Sys$UI$DomElement$getElementById(id, element) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "element", mayBeNull: true, domElement: true, optional: true} + ]); + if (e) throw e; + if (!element) return document.getElementById(id); + if (element.getElementById) return element.getElementById(id); + var nodeQueue = []; + var childNodes = element.childNodes; + for (var i = 0; i < childNodes.length; i++) { + var node = childNodes[i]; + if (node.nodeType == 1) { + nodeQueue[nodeQueue.length] = node; + } + } + while (nodeQueue.length) { + node = nodeQueue.shift(); + if (node.id == id) { + return node; + } + childNodes = node.childNodes; + for (i = 0; i < childNodes.length; i++) { + node = childNodes[i]; + if (node.nodeType == 1) { + nodeQueue[nodeQueue.length] = node; + } + } + } + return null; +} +if (document.documentElement.getBoundingClientRect) { + Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if (element.self || element.nodeType === 9) return new Sys.UI.Point(0,0); + var clientRect = element.getBoundingClientRect(); + if (!clientRect) { + return new Sys.UI.Point(0,0); + } + var documentElement = element.ownerDocument.documentElement, + offsetX = Math.floor(clientRect.left + 0.5) + documentElement.scrollLeft, + offsetY = Math.floor(clientRect.top + 0.5) + documentElement.scrollTop; + if (Sys.Browser.agent === Sys.Browser.InternetExplorer) { + try { + var f = element.ownerDocument.parentWindow.frameElement || null; + if (f) { + var offset = (f.frameBorder === "0" || f.frameBorder === "no") ? 2 : 0; + offsetX += offset; + offsetY += offset; + } + } + catch(ex) { + } + if (Sys.Browser.version <= 7) { + + var multiplier, before, rect, d = document.createElement("div"); + d.style.cssText = "position:absolute !important;left:0px !important;right:0px !important;height:0px !important;width:1px !important;display:hidden !important"; + try { + before = document.body.childNodes[0]; + document.body.insertBefore(d, before); + rect = d.getBoundingClientRect(); + document.body.removeChild(d); + multiplier = (rect.right - rect.left); + } + catch (e) { + } + if (multiplier && (multiplier !== 1)) { + offsetX = Math.floor(offsetX / multiplier); + offsetY = Math.floor(offsetY / multiplier); + } + } + if ((document.documentMode || 0) < 8) { + offsetX -= 2; + offsetY -= 2; + } + } + return new Sys.UI.Point(offsetX, offsetY); + } +} +else if (Sys.Browser.agent === Sys.Browser.Safari) { + Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0); + var offsetX = 0, offsetY = 0, + parent, + previous = null, + previousStyle = null, + currentStyle; + for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) { + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + var tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + if ((parent.offsetLeft || parent.offsetTop) && + ((tagName !== "BODY") || (!previousStyle || previousStyle.position !== "absolute"))) { + offsetX += parent.offsetLeft; + offsetY += parent.offsetTop; + } + if (previous && Sys.Browser.version >= 3) { + offsetX += parseInt(currentStyle.borderLeftWidth); + offsetY += parseInt(currentStyle.borderTopWidth); + } + } + currentStyle = Sys.UI.DomElement._getCurrentStyle(element); + var elementPosition = currentStyle ? currentStyle.position : null; + if (!elementPosition || (elementPosition !== "absolute")) { + for (parent = element.parentNode; parent; parent = parent.parentNode) { + tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) { + offsetX -= (parent.scrollLeft || 0); + offsetY -= (parent.scrollTop || 0); + } + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + var parentPosition = currentStyle ? currentStyle.position : null; + if (parentPosition && (parentPosition === "absolute")) break; + } + } + return new Sys.UI.Point(offsetX, offsetY); + } +} +else { + Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0); + var offsetX = 0, offsetY = 0, + parent, + previous = null, + previousStyle = null, + currentStyle = null; + for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) { + var tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + if ((parent.offsetLeft || parent.offsetTop) && + !((tagName === "BODY") && + (!previousStyle || previousStyle.position !== "absolute"))) { + offsetX += parent.offsetLeft; + offsetY += parent.offsetTop; + } + if (previous !== null && currentStyle) { + if ((tagName !== "TABLE") && (tagName !== "TD") && (tagName !== "HTML")) { + offsetX += parseInt(currentStyle.borderLeftWidth) || 0; + offsetY += parseInt(currentStyle.borderTopWidth) || 0; + } + if (tagName === "TABLE" && + (currentStyle.position === "relative" || currentStyle.position === "absolute")) { + offsetX += parseInt(currentStyle.marginLeft) || 0; + offsetY += parseInt(currentStyle.marginTop) || 0; + } + } + } + currentStyle = Sys.UI.DomElement._getCurrentStyle(element); + var elementPosition = currentStyle ? currentStyle.position : null; + if (!elementPosition || (elementPosition !== "absolute")) { + for (parent = element.parentNode; parent; parent = parent.parentNode) { + tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) { + offsetX -= (parent.scrollLeft || 0); + offsetY -= (parent.scrollTop || 0); + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + if (currentStyle) { + offsetX += parseInt(currentStyle.borderLeftWidth) || 0; + offsetY += parseInt(currentStyle.borderTopWidth) || 0; + } + } + } + } + return new Sys.UI.Point(offsetX, offsetY); + } +} +Sys.UI.DomElement.isDomElement = function Sys$UI$DomElement$isDomElement(obj) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "obj"} + ]); + if (e) throw e; + return Sys._isDomElement(obj); +} +Sys.UI.DomElement.removeCssClass = function Sys$UI$DomElement$removeCssClass(element, className) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + var currentClassName = ' ' + element.className + ' '; + var index = currentClassName.indexOf(' ' + className + ' '); + if (index >= 0) { + element.className = (currentClassName.substr(0, index) + ' ' + + currentClassName.substring(index + className.length + 1, currentClassName.length)).trim(); + } +} +Sys.UI.DomElement.resolveElement = function Sys$UI$DomElement$resolveElement(elementOrElementId, containerElement) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "elementOrElementId", mayBeNull: true}, + {name: "containerElement", mayBeNull: true, domElement: true, optional: true} + ]); + if (e) throw e; + var el = elementOrElementId; + if (!el) return null; + if (typeof(el) === "string") { + el = Sys.UI.DomElement.getElementById(el, containerElement); + if (!el) { + throw Error.argument("elementOrElementId", String.format(Sys.Res.elementNotFound, elementOrElementId)); + } + } + else if(!Sys.UI.DomElement.isDomElement(el)) { + throw Error.argument("elementOrElementId", Sys.Res.expectedElementOrId); + } + return el; +} +Sys.UI.DomElement.raiseBubbleEvent = function Sys$UI$DomElement$raiseBubbleEvent(source, args) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "source", domElement: true}, + {name: "args", type: Sys.EventArgs} + ]); + if (e) throw e; + var target = source; + while (target) { + var control = target.control; + if (control && control.onBubbleEvent && control.raiseBubbleEvent) { + Sys.UI.DomElement._raiseBubbleEventFromControl(control, source, args); + return; + } + target = target.parentNode; + } +} +Sys.UI.DomElement._raiseBubbleEventFromControl = function Sys$UI$DomElement$_raiseBubbleEventFromControl(control, source, args) { + if (!control.onBubbleEvent(source, args)) { + control._raiseBubbleEvent(source, args); + } +} +Sys.UI.DomElement.setLocation = function Sys$UI$DomElement$setLocation(element, x, y) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "x", type: Number, integer: true}, + {name: "y", type: Number, integer: true} + ]); + if (e) throw e; + var style = element.style; + style.position = 'absolute'; + style.left = x + "px"; + style.top = y + "px"; +} +Sys.UI.DomElement.toggleCssClass = function Sys$UI$DomElement$toggleCssClass(element, className) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + if (Sys.UI.DomElement.containsCssClass(element, className)) { + Sys.UI.DomElement.removeCssClass(element, className); + } + else { + Sys.UI.DomElement.addCssClass(element, className); + } +} +Sys.UI.DomElement.getVisibilityMode = function Sys$UI$DomElement$getVisibilityMode(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + return (element._visibilityMode === Sys.UI.VisibilityMode.hide) ? + Sys.UI.VisibilityMode.hide : + Sys.UI.VisibilityMode.collapse; +} +Sys.UI.DomElement.setVisibilityMode = function Sys$UI$DomElement$setVisibilityMode(element, value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "value", type: Sys.UI.VisibilityMode} + ]); + if (e) throw e; + Sys.UI.DomElement._ensureOldDisplayMode(element); + if (element._visibilityMode !== value) { + element._visibilityMode = value; + if (Sys.UI.DomElement.getVisible(element) === false) { + if (element._visibilityMode === Sys.UI.VisibilityMode.hide) { + element.style.display = element._oldDisplayMode; + } + else { + element.style.display = 'none'; + } + } + element._visibilityMode = value; + } +} +Sys.UI.DomElement.getVisible = function Sys$UI$DomElement$getVisible(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element); + if (!style) return true; + return (style.visibility !== 'hidden') && (style.display !== 'none'); +} +Sys.UI.DomElement.setVisible = function Sys$UI$DomElement$setVisible(element, value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "value", type: Boolean} + ]); + if (e) throw e; + if (value !== Sys.UI.DomElement.getVisible(element)) { + Sys.UI.DomElement._ensureOldDisplayMode(element); + element.style.visibility = value ? 'visible' : 'hidden'; + if (value || (element._visibilityMode === Sys.UI.VisibilityMode.hide)) { + element.style.display = element._oldDisplayMode; + } + else { + element.style.display = 'none'; + } + } +} +Sys.UI.DomElement._ensureOldDisplayMode = function Sys$UI$DomElement$_ensureOldDisplayMode(element) { + if (!element._oldDisplayMode) { + var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element); + element._oldDisplayMode = style ? style.display : null; + if (!element._oldDisplayMode || element._oldDisplayMode === 'none') { + switch(element.tagName.toUpperCase()) { + case 'DIV': case 'P': case 'ADDRESS': case 'BLOCKQUOTE': case 'BODY': case 'COL': + case 'COLGROUP': case 'DD': case 'DL': case 'DT': case 'FIELDSET': case 'FORM': + case 'H1': case 'H2': case 'H3': case 'H4': case 'H5': case 'H6': case 'HR': + case 'IFRAME': case 'LEGEND': case 'OL': case 'PRE': case 'TABLE': case 'TD': + case 'TH': case 'TR': case 'UL': + element._oldDisplayMode = 'block'; + break; + case 'LI': + element._oldDisplayMode = 'list-item'; + break; + default: + element._oldDisplayMode = 'inline'; + } + } + } +} +Sys.UI.DomElement._getWindow = function Sys$UI$DomElement$_getWindow(element) { + var doc = element.ownerDocument || element.document || element; + return doc.defaultView || doc.parentWindow; +} +Sys.UI.DomElement._getCurrentStyle = function Sys$UI$DomElement$_getCurrentStyle(element) { + if (element.nodeType === 3) return null; + var w = Sys.UI.DomElement._getWindow(element); + if (element.documentElement) element = element.documentElement; + var computedStyle = (w && (element !== w) && w.getComputedStyle) ? + w.getComputedStyle(element, null) : + element.currentStyle || element.style; + if (!computedStyle && (Sys.Browser.agent === Sys.Browser.Safari) && element.style) { + var oldDisplay = element.style.display; + var oldPosition = element.style.position; + element.style.position = 'absolute'; + element.style.display = 'block'; + var style = w.getComputedStyle(element, null); + element.style.display = oldDisplay; + element.style.position = oldPosition; + computedStyle = {}; + for (var n in style) { + computedStyle[n] = style[n]; + } + computedStyle.display = 'none'; + } + return computedStyle; +} + +Sys.IContainer = function Sys$IContainer() { + throw Error.notImplemented(); +} + function Sys$IContainer$addComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$IContainer$removeComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$IContainer$findComponent(id) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$IContainer$getComponents() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } +Sys.IContainer.prototype = { + addComponent: Sys$IContainer$addComponent, + removeComponent: Sys$IContainer$removeComponent, + findComponent: Sys$IContainer$findComponent, + getComponents: Sys$IContainer$getComponents +} +Sys.IContainer.registerInterface("Sys.IContainer"); + +Sys.ApplicationLoadEventArgs = function Sys$ApplicationLoadEventArgs(components, isPartialLoad) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "components", type: Array, elementType: Sys.Component}, + {name: "isPartialLoad", type: Boolean} + ]); + if (e) throw e; + Sys.ApplicationLoadEventArgs.initializeBase(this); + this._components = components; + this._isPartialLoad = isPartialLoad; +} + + function Sys$ApplicationLoadEventArgs$get_components() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._components; + } + function Sys$ApplicationLoadEventArgs$get_isPartialLoad() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._isPartialLoad; + } +Sys.ApplicationLoadEventArgs.prototype = { + get_components: Sys$ApplicationLoadEventArgs$get_components, + get_isPartialLoad: Sys$ApplicationLoadEventArgs$get_isPartialLoad +} +Sys.ApplicationLoadEventArgs.registerClass('Sys.ApplicationLoadEventArgs', Sys.EventArgs); + +Sys._Application = function Sys$_Application() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + Sys._Application.initializeBase(this); + this._disposableObjects = []; + this._components = {}; + this._createdComponents = []; + this._secondPassComponents = []; + this._unloadHandlerDelegate = Function.createDelegate(this, this._unloadHandler); + Sys.UI.DomEvent.addHandler(window, "unload", this._unloadHandlerDelegate); + this._domReady(); +} + function Sys$_Application$get_isCreatingComponents() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._creatingComponents; + } + function Sys$_Application$get_isDisposing() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._disposing; + } + function Sys$_Application$add_init(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + if (this._initialized) { + handler(this, Sys.EventArgs.Empty); + } + else { + this.get_events().addHandler("init", handler); + } + } + function Sys$_Application$remove_init(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("init", handler); + } + function Sys$_Application$add_load(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("load", handler); + } + function Sys$_Application$remove_load(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("load", handler); + } + function Sys$_Application$add_unload(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("unload", handler); + } + function Sys$_Application$remove_unload(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("unload", handler); + } + function Sys$_Application$addComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + var id = component.get_id(); + if (!id) throw Error.invalidOperation(Sys.Res.cantAddWithoutId); + if (typeof(this._components[id]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.appDuplicateComponent, id)); + this._components[id] = component; + } + function Sys$_Application$beginCreateComponents() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._creatingComponents = true; + } + function Sys$_Application$dispose() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._disposing) { + this._disposing = true; + if (this._timerCookie) { + window.clearTimeout(this._timerCookie); + delete this._timerCookie; + } + if (this._endRequestHandler) { + Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler); + delete this._endRequestHandler; + } + if (this._beginRequestHandler) { + Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler); + delete this._beginRequestHandler; + } + if (window.pageUnload) { + window.pageUnload(this, Sys.EventArgs.Empty); + } + var unloadHandler = this.get_events().getHandler("unload"); + if (unloadHandler) { + unloadHandler(this, Sys.EventArgs.Empty); + } + var disposableObjects = Array.clone(this._disposableObjects); + for (var i = 0, l = disposableObjects.length; i < l; i++) { + var object = disposableObjects[i]; + if (typeof(object) !== "undefined") { + object.dispose(); + } + } + Array.clear(this._disposableObjects); + Sys.UI.DomEvent.removeHandler(window, "unload", this._unloadHandlerDelegate); + if (Sys._ScriptLoader) { + var sl = Sys._ScriptLoader.getInstance(); + if(sl) { + sl.dispose(); + } + } + Sys._Application.callBaseMethod(this, 'dispose'); + } + } + function Sys$_Application$disposeElement(element, childNodesOnly) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "childNodesOnly", type: Boolean} + ]); + if (e) throw e; + if (element.nodeType === 1) { + var children = element.getElementsByTagName("*"); + for (var i = children.length - 1; i >= 0; i--) { + this._disposeElementInternal(children[i]); + } + if (!childNodesOnly) { + this._disposeElementInternal(element); + } + } + } + function Sys$_Application$endCreateComponents() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var components = this._secondPassComponents; + for (var i = 0, l = components.length; i < l; i++) { + var component = components[i].component; + Sys$Component$_setReferences(component, components[i].references); + component.endUpdate(); + } + this._secondPassComponents = []; + this._creatingComponents = false; + } + function Sys$_Application$findComponent(id, parent) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "parent", mayBeNull: true, optional: true} + ]); + if (e) throw e; + return (parent ? + ((Sys.IContainer.isInstanceOfType(parent)) ? + parent.findComponent(id) : + parent[id] || null) : + Sys.Application._components[id] || null); + } + function Sys$_Application$getComponents() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var res = []; + var components = this._components; + for (var name in components) { + res[res.length] = components[name]; + } + return res; + } + function Sys$_Application$initialize() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if(!this.get_isInitialized() && !this._disposing) { + Sys._Application.callBaseMethod(this, 'initialize'); + this._raiseInit(); + if (this.get_stateString) { + if (Sys.WebForms && Sys.WebForms.PageRequestManager) { + this._beginRequestHandler = Function.createDelegate(this, this._onPageRequestManagerBeginRequest); + Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler); + this._endRequestHandler = Function.createDelegate(this, this._onPageRequestManagerEndRequest); + Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler); + } + var loadedEntry = this.get_stateString(); + if (loadedEntry !== this._currentEntry) { + this._navigate(loadedEntry); + } + else { + this._ensureHistory(); + } + } + this.raiseLoad(); + } + } + function Sys$_Application$notifyScriptLoaded() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + } + function Sys$_Application$registerDisposableObject(object) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", type: Sys.IDisposable} + ]); + if (e) throw e; + if (!this._disposing) { + var objects = this._disposableObjects, + i = objects.length; + objects[i] = object; + object.__msdisposeindex = i; + } + } + function Sys$_Application$raiseLoad() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var h = this.get_events().getHandler("load"); + var args = new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents), !!this._loaded); + this._loaded = true; + if (h) { + h(this, args); + } + if (window.pageLoad) { + window.pageLoad(this, args); + } + this._createdComponents = []; + } + function Sys$_Application$removeComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + var id = component.get_id(); + if (id) delete this._components[id]; + } + function Sys$_Application$unregisterDisposableObject(object) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", type: Sys.IDisposable} + ]); + if (e) throw e; + if (!this._disposing) { + var i = object.__msdisposeindex; + if (typeof(i) === "number") { + var disposableObjects = this._disposableObjects; + delete disposableObjects[i]; + delete object.__msdisposeindex; + if (++this._deleteCount > 1000) { + var newArray = []; + for (var j = 0, l = disposableObjects.length; j < l; j++) { + object = disposableObjects[j]; + if (typeof(object) !== "undefined") { + object.__msdisposeindex = newArray.length; + newArray.push(object); + } + } + this._disposableObjects = newArray; + this._deleteCount = 0; + } + } + } + } + function Sys$_Application$_addComponentToSecondPass(component, references) { + this._secondPassComponents[this._secondPassComponents.length] = {component: component, references: references}; + } + function Sys$_Application$_disposeComponents(list) { + if (list) { + for (var i = list.length - 1; i >= 0; i--) { + var item = list[i]; + if (typeof(item.dispose) === "function") { + item.dispose(); + } + } + } + } + function Sys$_Application$_disposeElementInternal(element) { + var d = element.dispose; + if (d && typeof(d) === "function") { + element.dispose(); + } + else { + var c = element.control; + if (c && typeof(c.dispose) === "function") { + c.dispose(); + } + } + var list = element._behaviors; + if (list) { + this._disposeComponents(list); + } + list = element._components; + if (list) { + this._disposeComponents(list); + element._components = null; + } + } + function Sys$_Application$_domReady() { + var check, er, app = this; + function init() { app.initialize(); } + var onload = function() { + Sys.UI.DomEvent.removeHandler(window, "load", onload); + init(); + } + Sys.UI.DomEvent.addHandler(window, "load", onload); + + if (document.addEventListener) { + try { + document.addEventListener("DOMContentLoaded", check = function() { + document.removeEventListener("DOMContentLoaded", check, false); + init(); + }, false); + } + catch (er) { } + } + else if (document.attachEvent) { + if ((window == window.top) && document.documentElement.doScroll) { + var timeout, el = document.createElement("div"); + check = function() { + try { + el.doScroll("left"); + } + catch (er) { + timeout = window.setTimeout(check, 0); + return; + } + el = null; + init(); + } + check(); + } + else { + document.attachEvent("onreadystatechange", check = function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", check); + init(); + } + }); + } + } + } + function Sys$_Application$_raiseInit() { + var handler = this.get_events().getHandler("init"); + if (handler) { + this.beginCreateComponents(); + handler(this, Sys.EventArgs.Empty); + this.endCreateComponents(); + } + } + function Sys$_Application$_unloadHandler(event) { + this.dispose(); + } +Sys._Application.prototype = { + _creatingComponents: false, + _disposing: false, + _deleteCount: 0, + get_isCreatingComponents: Sys$_Application$get_isCreatingComponents, + get_isDisposing: Sys$_Application$get_isDisposing, + add_init: Sys$_Application$add_init, + remove_init: Sys$_Application$remove_init, + add_load: Sys$_Application$add_load, + remove_load: Sys$_Application$remove_load, + add_unload: Sys$_Application$add_unload, + remove_unload: Sys$_Application$remove_unload, + addComponent: Sys$_Application$addComponent, + beginCreateComponents: Sys$_Application$beginCreateComponents, + dispose: Sys$_Application$dispose, + disposeElement: Sys$_Application$disposeElement, + endCreateComponents: Sys$_Application$endCreateComponents, + findComponent: Sys$_Application$findComponent, + getComponents: Sys$_Application$getComponents, + initialize: Sys$_Application$initialize, + notifyScriptLoaded: Sys$_Application$notifyScriptLoaded, + registerDisposableObject: Sys$_Application$registerDisposableObject, + raiseLoad: Sys$_Application$raiseLoad, + removeComponent: Sys$_Application$removeComponent, + unregisterDisposableObject: Sys$_Application$unregisterDisposableObject, + _addComponentToSecondPass: Sys$_Application$_addComponentToSecondPass, + _disposeComponents: Sys$_Application$_disposeComponents, + _disposeElementInternal: Sys$_Application$_disposeElementInternal, + _domReady: Sys$_Application$_domReady, + _raiseInit: Sys$_Application$_raiseInit, + _unloadHandler: Sys$_Application$_unloadHandler +} +Sys._Application.registerClass('Sys._Application', Sys.Component, Sys.IContainer); +Sys.Application = new Sys._Application(); +var $find = Sys.Application.findComponent; + +Sys.UI.Behavior = function Sys$UI$Behavior(element) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + Sys.UI.Behavior.initializeBase(this); + this._element = element; + var behaviors = element._behaviors; + if (!behaviors) { + element._behaviors = [this]; + } + else { + behaviors[behaviors.length] = this; + } +} + function Sys$UI$Behavior$get_element() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._element; + } + function Sys$UI$Behavior$get_id() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var baseId = Sys.UI.Behavior.callBaseMethod(this, 'get_id'); + if (baseId) return baseId; + if (!this._element || !this._element.id) return ''; + return this._element.id + '$' + this.get_name(); + } + function Sys$UI$Behavior$get_name() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._name) return this._name; + var name = Object.getTypeName(this); + var i = name.lastIndexOf('.'); + if (i !== -1) name = name.substr(i + 1); + if (!this.get_isInitialized()) this._name = name; + return name; + } + function Sys$UI$Behavior$set_name(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + if ((value === '') || (value.charAt(0) === ' ') || (value.charAt(value.length - 1) === ' ')) + throw Error.argument('value', Sys.Res.invalidId); + if (typeof(this._element[value]) !== 'undefined') + throw Error.invalidOperation(String.format(Sys.Res.behaviorDuplicateName, value)); + if (this.get_isInitialized()) throw Error.invalidOperation(Sys.Res.cantSetNameAfterInit); + this._name = value; + } + function Sys$UI$Behavior$initialize() { + Sys.UI.Behavior.callBaseMethod(this, 'initialize'); + var name = this.get_name(); + if (name) this._element[name] = this; + } + function Sys$UI$Behavior$dispose() { + Sys.UI.Behavior.callBaseMethod(this, 'dispose'); + var e = this._element; + if (e) { + var name = this.get_name(); + if (name) { + e[name] = null; + } + var behaviors = e._behaviors; + Array.remove(behaviors, this); + if (behaviors.length === 0) { + e._behaviors = null; + } + delete this._element; + } + } +Sys.UI.Behavior.prototype = { + _name: null, + get_element: Sys$UI$Behavior$get_element, + get_id: Sys$UI$Behavior$get_id, + get_name: Sys$UI$Behavior$get_name, + set_name: Sys$UI$Behavior$set_name, + initialize: Sys$UI$Behavior$initialize, + dispose: Sys$UI$Behavior$dispose +} +Sys.UI.Behavior.registerClass('Sys.UI.Behavior', Sys.Component); +Sys.UI.Behavior.getBehaviorByName = function Sys$UI$Behavior$getBehaviorByName(element, name) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "name", type: String} + ]); + if (e) throw e; + var b = element[name]; + return (b && Sys.UI.Behavior.isInstanceOfType(b)) ? b : null; +} +Sys.UI.Behavior.getBehaviors = function Sys$UI$Behavior$getBehaviors(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if (!element._behaviors) return []; + return Array.clone(element._behaviors); +} +Sys.UI.Behavior.getBehaviorsByType = function Sys$UI$Behavior$getBehaviorsByType(element, type) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "type", type: Type} + ]); + if (e) throw e; + var behaviors = element._behaviors; + var results = []; + if (behaviors) { + for (var i = 0, l = behaviors.length; i < l; i++) { + if (type.isInstanceOfType(behaviors[i])) { + results[results.length] = behaviors[i]; + } + } + } + return results; +} + +Sys.UI.VisibilityMode = function Sys$UI$VisibilityMode() { + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.VisibilityMode.prototype = { + hide: 0, + collapse: 1 +} +Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode"); + +Sys.UI.Control = function Sys$UI$Control(element) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if (typeof(element.control) !== 'undefined') throw Error.invalidOperation(Sys.Res.controlAlreadyDefined); + Sys.UI.Control.initializeBase(this); + this._element = element; + element.control = this; + var role = this.get_role(); + if (role) { + element.setAttribute("role", role); + } +} + function Sys$UI$Control$get_element() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._element; + } + function Sys$UI$Control$get_id() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._element) return ''; + return this._element.id; + } + function Sys$UI$Control$set_id(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + throw Error.invalidOperation(Sys.Res.cantSetId); + } + function Sys$UI$Control$get_parent() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._parent) return this._parent; + if (!this._element) return null; + + var parentElement = this._element.parentNode; + while (parentElement) { + if (parentElement.control) { + return parentElement.control; + } + parentElement = parentElement.parentNode; + } + return null; + } + function Sys$UI$Control$set_parent(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.Control}]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + var parents = [this]; + var current = value; + while (current) { + if (Array.contains(parents, current)) throw Error.invalidOperation(Sys.Res.circularParentChain); + parents[parents.length] = current; + current = current.get_parent(); + } + this._parent = value; + } + function Sys$UI$Control$get_role() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return null; + } + function Sys$UI$Control$get_visibilityMode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + return Sys.UI.DomElement.getVisibilityMode(this._element); + } + function Sys$UI$Control$set_visibilityMode(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.VisibilityMode}]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.setVisibilityMode(this._element, value); + } + function Sys$UI$Control$get_visible() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + return Sys.UI.DomElement.getVisible(this._element); + } + function Sys$UI$Control$set_visible(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.setVisible(this._element, value) + } + function Sys$UI$Control$addCssClass(className) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "className", type: String} + ]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.addCssClass(this._element, className); + } + function Sys$UI$Control$dispose() { + Sys.UI.Control.callBaseMethod(this, 'dispose'); + if (this._element) { + this._element.control = null; + delete this._element; + } + if (this._parent) delete this._parent; + } + function Sys$UI$Control$onBubbleEvent(source, args) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "source"}, + {name: "args", type: Sys.EventArgs} + ]); + if (e) throw e; + return false; + } + function Sys$UI$Control$raiseBubbleEvent(source, args) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "source"}, + {name: "args", type: Sys.EventArgs} + ]); + if (e) throw e; + this._raiseBubbleEvent(source, args); + } + function Sys$UI$Control$_raiseBubbleEvent(source, args) { + var currentTarget = this.get_parent(); + while (currentTarget) { + if (currentTarget.onBubbleEvent(source, args)) { + return; + } + currentTarget = currentTarget.get_parent(); + } + } + function Sys$UI$Control$removeCssClass(className) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "className", type: String} + ]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.removeCssClass(this._element, className); + } + function Sys$UI$Control$toggleCssClass(className) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "className", type: String} + ]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.toggleCssClass(this._element, className); + } +Sys.UI.Control.prototype = { + _parent: null, + _visibilityMode: Sys.UI.VisibilityMode.hide, + get_element: Sys$UI$Control$get_element, + get_id: Sys$UI$Control$get_id, + set_id: Sys$UI$Control$set_id, + get_parent: Sys$UI$Control$get_parent, + set_parent: Sys$UI$Control$set_parent, + get_role: Sys$UI$Control$get_role, + get_visibilityMode: Sys$UI$Control$get_visibilityMode, + set_visibilityMode: Sys$UI$Control$set_visibilityMode, + get_visible: Sys$UI$Control$get_visible, + set_visible: Sys$UI$Control$set_visible, + addCssClass: Sys$UI$Control$addCssClass, + dispose: Sys$UI$Control$dispose, + onBubbleEvent: Sys$UI$Control$onBubbleEvent, + raiseBubbleEvent: Sys$UI$Control$raiseBubbleEvent, + _raiseBubbleEvent: Sys$UI$Control$_raiseBubbleEvent, + removeCssClass: Sys$UI$Control$removeCssClass, + toggleCssClass: Sys$UI$Control$toggleCssClass +} +Sys.UI.Control.registerClass('Sys.UI.Control', Sys.Component); +Sys.HistoryEventArgs = function Sys$HistoryEventArgs(state) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "state", type: Object} + ]); + if (e) throw e; + Sys.HistoryEventArgs.initializeBase(this); + this._state = state; +} + function Sys$HistoryEventArgs$get_state() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._state; + } +Sys.HistoryEventArgs.prototype = { + get_state: Sys$HistoryEventArgs$get_state +} +Sys.HistoryEventArgs.registerClass('Sys.HistoryEventArgs', Sys.EventArgs); +Sys.Application._appLoadHandler = null; +Sys.Application._beginRequestHandler = null; +Sys.Application._clientId = null; +Sys.Application._currentEntry = ''; +Sys.Application._endRequestHandler = null; +Sys.Application._history = null; +Sys.Application._enableHistory = false; +Sys.Application._historyEnabledInScriptManager = false; +Sys.Application._historyFrame = null; +Sys.Application._historyInitialized = false; +Sys.Application._historyPointIsNew = false; +Sys.Application._ignoreTimer = false; +Sys.Application._initialState = null; +Sys.Application._state = {}; +Sys.Application._timerCookie = 0; +Sys.Application._timerHandler = null; +Sys.Application._uniqueId = null; +Sys._Application.prototype.get_stateString = function Sys$_Application$get_stateString() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var hash = null; + + if (Sys.Browser.agent === Sys.Browser.Firefox) { + var href = window.location.href; + var hashIndex = href.indexOf('#'); + if (hashIndex !== -1) { + hash = href.substring(hashIndex + 1); + } + else { + hash = ""; + } + return hash; + } + else { + hash = window.location.hash; + } + + if ((hash.length > 0) && (hash.charAt(0) === '#')) { + hash = hash.substring(1); + } + return hash; +}; +Sys._Application.prototype.get_enableHistory = function Sys$_Application$get_enableHistory() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._enableHistory; +}; +Sys._Application.prototype.set_enableHistory = function Sys$_Application$set_enableHistory(value) { + if (this._initialized && !this._initializing) { + throw Error.invalidOperation(Sys.Res.historyCannotEnableHistory); + } + else if (this._historyEnabledInScriptManager && !value) { + throw Error.invalidOperation(Sys.Res.invalidHistorySettingCombination); + } + this._enableHistory = value; +}; +Sys._Application.prototype.add_navigate = function Sys$_Application$add_navigate(handler) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "handler", type: Function} + ]); + if (e) throw e; + this.get_events().addHandler("navigate", handler); +}; +Sys._Application.prototype.remove_navigate = function Sys$_Application$remove_navigate(handler) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "handler", type: Function} + ]); + if (e) throw e; + this.get_events().removeHandler("navigate", handler); +}; +Sys._Application.prototype.addHistoryPoint = function Sys$_Application$addHistoryPoint(state, title) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "state", type: Object}, + {name: "title", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + if (!this._enableHistory) throw Error.invalidOperation(Sys.Res.historyCannotAddHistoryPointWithHistoryDisabled); + for (var n in state) { + var v = state[n]; + var t = typeof(v); + if ((v !== null) && ((t === 'object') || (t === 'function') || (t === 'undefined'))) { + throw Error.argument('state', Sys.Res.stateMustBeStringDictionary); + } + } + this._ensureHistory(); + var initialState = this._state; + for (var key in state) { + var value = state[key]; + if (value === null) { + if (typeof(initialState[key]) !== 'undefined') { + delete initialState[key]; + } + } + else { + initialState[key] = value; + } + } + var entry = this._serializeState(initialState); + this._historyPointIsNew = true; + this._setState(entry, title); + this._raiseNavigate(); +}; +Sys._Application.prototype.setServerId = function Sys$_Application$setServerId(clientId, uniqueId) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "clientId", type: String}, + {name: "uniqueId", type: String} + ]); + if (e) throw e; + this._clientId = clientId; + this._uniqueId = uniqueId; +}; +Sys._Application.prototype.setServerState = function Sys$_Application$setServerState(value) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ]); + if (e) throw e; + this._ensureHistory(); + this._state.__s = value; + this._updateHiddenField(value); +}; +Sys._Application.prototype._deserializeState = function Sys$_Application$_deserializeState(entry) { + var result = {}; + entry = entry || ''; + var serverSeparator = entry.indexOf('&&'); + if ((serverSeparator !== -1) && (serverSeparator + 2 < entry.length)) { + result.__s = entry.substr(serverSeparator + 2); + entry = entry.substr(0, serverSeparator); + } + var tokens = entry.split('&'); + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + var equal = token.indexOf('='); + if ((equal !== -1) && (equal + 1 < token.length)) { + var name = token.substr(0, equal); + var value = token.substr(equal + 1); + result[name] = decodeURIComponent(value); + } + } + return result; +}; +Sys._Application.prototype._enableHistoryInScriptManager = function Sys$_Application$_enableHistoryInScriptManager() { + this._enableHistory = true; + this._historyEnabledInScriptManager = true; +}; +Sys._Application.prototype._ensureHistory = function Sys$_Application$_ensureHistory() { + if (!this._historyInitialized && this._enableHistory) { + if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.documentMode < 8)) { + this._historyFrame = document.getElementById('__historyFrame'); + if (!this._historyFrame) throw Error.invalidOperation(Sys.Res.historyMissingFrame); + this._ignoreIFrame = true; + } + this._timerHandler = Function.createDelegate(this, this._onIdle); + this._timerCookie = window.setTimeout(this._timerHandler, 100); + + try { + this._initialState = this._deserializeState(this.get_stateString()); + } catch(e) {} + + this._historyInitialized = true; + } +}; +Sys._Application.prototype._navigate = function Sys$_Application$_navigate(entry) { + this._ensureHistory(); + var state = this._deserializeState(entry); + + if (this._uniqueId) { + var oldServerEntry = this._state.__s || ''; + var newServerEntry = state.__s || ''; + if (newServerEntry !== oldServerEntry) { + this._updateHiddenField(newServerEntry); + __doPostBack(this._uniqueId, newServerEntry); + this._state = state; + return; + } + } + this._setState(entry); + this._state = state; + this._raiseNavigate(); +}; +Sys._Application.prototype._onIdle = function Sys$_Application$_onIdle() { + delete this._timerCookie; + + var entry = this.get_stateString(); + if (entry !== this._currentEntry) { + if (!this._ignoreTimer) { + this._historyPointIsNew = false; + this._navigate(entry); + } + } + else { + this._ignoreTimer = false; + } + this._timerCookie = window.setTimeout(this._timerHandler, 100); +}; +Sys._Application.prototype._onIFrameLoad = function Sys$_Application$_onIFrameLoad(entry) { + this._ensureHistory(); + if (!this._ignoreIFrame) { + this._historyPointIsNew = false; + this._navigate(entry); + } + this._ignoreIFrame = false; +}; +Sys._Application.prototype._onPageRequestManagerBeginRequest = function Sys$_Application$_onPageRequestManagerBeginRequest(sender, args) { + this._ignoreTimer = true; +}; +Sys._Application.prototype._onPageRequestManagerEndRequest = function Sys$_Application$_onPageRequestManagerEndRequest(sender, args) { + var dataItem = args.get_dataItems()[this._clientId]; + var eventTarget = document.getElementById("__EVENTTARGET"); + if (eventTarget && eventTarget.value === this._uniqueId) { + eventTarget.value = ''; + } + if (typeof(dataItem) !== 'undefined') { + this.setServerState(dataItem); + this._historyPointIsNew = true; + } + else { + this._ignoreTimer = false; + } + var entry = this._serializeState(this._state); + if (entry !== this._currentEntry) { + this._ignoreTimer = true; + this._setState(entry); + this._raiseNavigate(); + } +}; +Sys._Application.prototype._raiseNavigate = function Sys$_Application$_raiseNavigate() { + var h = this.get_events().getHandler("navigate"); + var stateClone = {}; + for (var key in this._state) { + if (key !== '__s') { + stateClone[key] = this._state[key]; + } + } + var args = new Sys.HistoryEventArgs(stateClone); + if (h) { + h(this, args); + } + var err; + try { + if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash && + (!window.frameElement || window.top.location.hash)) { + window.history.go(0); + } + } + catch(err) { + } +}; +Sys._Application.prototype._serializeState = function Sys$_Application$_serializeState(state) { + var serialized = []; + for (var key in state) { + var value = state[key]; + if (key === '__s') { + var serverState = value; + } + else { + if (key.indexOf('=') !== -1) throw Error.argument('state', Sys.Res.stateFieldNameInvalid); + serialized[serialized.length] = key + '=' + encodeURIComponent(value); + } + } + return serialized.join('&') + (serverState ? '&&' + serverState : ''); +}; +Sys._Application.prototype._setState = function Sys$_Application$_setState(entry, title) { + if (this._enableHistory) { + entry = entry || ''; + if (entry !== this._currentEntry) { + if (window.theForm) { + var action = window.theForm.action; + var hashIndex = action.indexOf('#'); + window.theForm.action = ((hashIndex !== -1) ? action.substring(0, hashIndex) : action) + '#' + entry; + } + + if (this._historyFrame && this._historyPointIsNew) { + this._ignoreIFrame = true; + var frameDoc = this._historyFrame.contentWindow.document; + frameDoc.open("javascript:''"); + frameDoc.write("" + (title || document.title) + + "parent.Sys.Application._onIFrameLoad(" + + Sys.Serialization.JavaScriptSerializer.serialize(entry) + + ");"); + frameDoc.close(); + } + this._ignoreTimer = false; + this._currentEntry = entry; + if (this._historyFrame || this._historyPointIsNew) { + var currentHash = this.get_stateString(); + if (entry !== currentHash) { + var loc = document.location; + if (loc.href.length - loc.hash.length + entry.length > 1024) { + throw Error.invalidOperation(Sys.Res.urlMustBeLessThan1024chars); + } + window.location.hash = entry; + this._currentEntry = this.get_stateString(); + if ((typeof(title) !== 'undefined') && (title !== null)) { + document.title = title; + } + } + } + this._historyPointIsNew = false; + } + } +}; +Sys._Application.prototype._updateHiddenField = function Sys$_Application$_updateHiddenField(value) { + if (this._clientId) { + var serverStateField = document.getElementById(this._clientId); + if (serverStateField) { + serverStateField.value = value; + } + } +}; + +if (!window.XMLHttpRequest) { + window.XMLHttpRequest = function window$XMLHttpRequest() { + var progIDs = [ 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ]; + for (var i = 0, l = progIDs.length; i < l; i++) { + try { + return new ActiveXObject(progIDs[i]); + } + catch (ex) { + } + } + return null; + } +} +Type.registerNamespace('Sys.Net'); + +Sys.Net.WebRequestExecutor = function Sys$Net$WebRequestExecutor() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._webRequest = null; + this._resultObject = null; +} + function Sys$Net$WebRequestExecutor$get_webRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._webRequest; + } + function Sys$Net$WebRequestExecutor$_set_webRequest(value) { + if (this.get_started()) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'set_webRequest')); + } + this._webRequest = value; + } + function Sys$Net$WebRequestExecutor$get_started() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_responseAvailable() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_timedOut() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_aborted() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_responseData() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_statusCode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_statusText() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_xml() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_object() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._resultObject) { + this._resultObject = Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData()); + } + return this._resultObject; + } + function Sys$Net$WebRequestExecutor$executeRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$abort() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$getResponseHeader(header) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "header", type: String} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$getAllResponseHeaders() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } +Sys.Net.WebRequestExecutor.prototype = { + get_webRequest: Sys$Net$WebRequestExecutor$get_webRequest, + _set_webRequest: Sys$Net$WebRequestExecutor$_set_webRequest, + get_started: Sys$Net$WebRequestExecutor$get_started, + get_responseAvailable: Sys$Net$WebRequestExecutor$get_responseAvailable, + get_timedOut: Sys$Net$WebRequestExecutor$get_timedOut, + get_aborted: Sys$Net$WebRequestExecutor$get_aborted, + get_responseData: Sys$Net$WebRequestExecutor$get_responseData, + get_statusCode: Sys$Net$WebRequestExecutor$get_statusCode, + get_statusText: Sys$Net$WebRequestExecutor$get_statusText, + get_xml: Sys$Net$WebRequestExecutor$get_xml, + get_object: Sys$Net$WebRequestExecutor$get_object, + executeRequest: Sys$Net$WebRequestExecutor$executeRequest, + abort: Sys$Net$WebRequestExecutor$abort, + getResponseHeader: Sys$Net$WebRequestExecutor$getResponseHeader, + getAllResponseHeaders: Sys$Net$WebRequestExecutor$getAllResponseHeaders +} +Sys.Net.WebRequestExecutor.registerClass('Sys.Net.WebRequestExecutor'); + +Sys.Net.XMLDOM = function Sys$Net$XMLDOM(markup) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "markup", type: String} + ]); + if (e) throw e; + if (!window.DOMParser) { + var progIDs = [ 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ]; + for (var i = 0, l = progIDs.length; i < l; i++) { + try { + var xmlDOM = new ActiveXObject(progIDs[i]); + xmlDOM.async = false; + xmlDOM.loadXML(markup); + xmlDOM.setProperty('SelectionLanguage', 'XPath'); + return xmlDOM; + } + catch (ex) { + } + } + } + else { + try { + var domParser = new window.DOMParser(); + return domParser.parseFromString(markup, 'text/xml'); + } + catch (ex) { + } + } + return null; +} +Sys.Net.XMLHttpExecutor = function Sys$Net$XMLHttpExecutor() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + Sys.Net.XMLHttpExecutor.initializeBase(this); + var _this = this; + this._xmlHttpRequest = null; + this._webRequest = null; + this._responseAvailable = false; + this._timedOut = false; + this._timer = null; + this._aborted = false; + this._started = false; + this._onReadyStateChange = (function () { + + if (_this._xmlHttpRequest.readyState === 4 ) { + try { + if (typeof(_this._xmlHttpRequest.status) === "undefined") { + return; + } + } + catch(ex) { + return; + } + + _this._clearTimer(); + _this._responseAvailable = true; + _this._webRequest.completed(Sys.EventArgs.Empty); + if (_this._xmlHttpRequest != null) { + _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; + _this._xmlHttpRequest = null; + } + } + }); + this._clearTimer = (function() { + if (_this._timer != null) { + window.clearTimeout(_this._timer); + _this._timer = null; + } + }); + this._onTimeout = (function() { + if (!_this._responseAvailable) { + _this._clearTimer(); + _this._timedOut = true; + _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; + _this._xmlHttpRequest.abort(); + _this._webRequest.completed(Sys.EventArgs.Empty); + _this._xmlHttpRequest = null; + } + }); +} + function Sys$Net$XMLHttpExecutor$get_timedOut() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._timedOut; + } + function Sys$Net$XMLHttpExecutor$get_started() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._started; + } + function Sys$Net$XMLHttpExecutor$get_responseAvailable() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._responseAvailable; + } + function Sys$Net$XMLHttpExecutor$get_aborted() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._aborted; + } + function Sys$Net$XMLHttpExecutor$executeRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._webRequest = this.get_webRequest(); + if (this._started) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'executeRequest')); + } + if (this._webRequest === null) { + throw Error.invalidOperation(Sys.Res.nullWebRequest); + } + var body = this._webRequest.get_body(); + var headers = this._webRequest.get_headers(); + this._xmlHttpRequest = new XMLHttpRequest(); + this._xmlHttpRequest.onreadystatechange = this._onReadyStateChange; + var verb = this._webRequest.get_httpVerb(); + this._xmlHttpRequest.open(verb, this._webRequest.getResolvedUrl(), true ); + this._xmlHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + if (headers) { + for (var header in headers) { + var val = headers[header]; + if (typeof(val) !== "function") + this._xmlHttpRequest.setRequestHeader(header, val); + } + } + if (verb.toLowerCase() === "post") { + if ((headers === null) || !headers['Content-Type']) { + this._xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8'); + } + if (!body) { + body = ""; + } + } + var timeout = this._webRequest.get_timeout(); + if (timeout > 0) { + this._timer = window.setTimeout(Function.createDelegate(this, this._onTimeout), timeout); + } + this._xmlHttpRequest.send(body); + this._started = true; + } + function Sys$Net$XMLHttpExecutor$getResponseHeader(header) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "header", type: String} + ]); + if (e) throw e; + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getResponseHeader')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getResponseHeader')); + } + var result; + try { + result = this._xmlHttpRequest.getResponseHeader(header); + } catch (e) { + } + if (!result) result = ""; + return result; + } + function Sys$Net$XMLHttpExecutor$getAllResponseHeaders() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getAllResponseHeaders')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getAllResponseHeaders')); + } + return this._xmlHttpRequest.getAllResponseHeaders(); + } + function Sys$Net$XMLHttpExecutor$get_responseData() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_responseData')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_responseData')); + } + return this._xmlHttpRequest.responseText; + } + function Sys$Net$XMLHttpExecutor$get_statusCode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusCode')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusCode')); + } + var result = 0; + try { + result = this._xmlHttpRequest.status; + } + catch(ex) { + } + return result; + } + function Sys$Net$XMLHttpExecutor$get_statusText() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusText')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusText')); + } + return this._xmlHttpRequest.statusText; + } + function Sys$Net$XMLHttpExecutor$get_xml() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_xml')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_xml')); + } + var xml = this._xmlHttpRequest.responseXML; + if (!xml || !xml.documentElement) { + xml = Sys.Net.XMLDOM(this._xmlHttpRequest.responseText); + if (!xml || !xml.documentElement) + return null; + } + else if (navigator.userAgent.indexOf('MSIE') !== -1) { + xml.setProperty('SelectionLanguage', 'XPath'); + } + if (xml.documentElement.namespaceURI === "http://www.mozilla.org/newlayout/xml/parsererror.xml" && + xml.documentElement.tagName === "parsererror") { + return null; + } + + if (xml.documentElement.firstChild && xml.documentElement.firstChild.tagName === "parsererror") { + return null; + } + + return xml; + } + function Sys$Net$XMLHttpExecutor$abort() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._started) { + throw Error.invalidOperation(Sys.Res.cannotAbortBeforeStart); + } + if (this._aborted || this._responseAvailable || this._timedOut) + return; + this._aborted = true; + this._clearTimer(); + if (this._xmlHttpRequest && !this._responseAvailable) { + this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; + this._xmlHttpRequest.abort(); + + this._xmlHttpRequest = null; + this._webRequest.completed(Sys.EventArgs.Empty); + } + } +Sys.Net.XMLHttpExecutor.prototype = { + get_timedOut: Sys$Net$XMLHttpExecutor$get_timedOut, + get_started: Sys$Net$XMLHttpExecutor$get_started, + get_responseAvailable: Sys$Net$XMLHttpExecutor$get_responseAvailable, + get_aborted: Sys$Net$XMLHttpExecutor$get_aborted, + executeRequest: Sys$Net$XMLHttpExecutor$executeRequest, + getResponseHeader: Sys$Net$XMLHttpExecutor$getResponseHeader, + getAllResponseHeaders: Sys$Net$XMLHttpExecutor$getAllResponseHeaders, + get_responseData: Sys$Net$XMLHttpExecutor$get_responseData, + get_statusCode: Sys$Net$XMLHttpExecutor$get_statusCode, + get_statusText: Sys$Net$XMLHttpExecutor$get_statusText, + get_xml: Sys$Net$XMLHttpExecutor$get_xml, + abort: Sys$Net$XMLHttpExecutor$abort +} +Sys.Net.XMLHttpExecutor.registerClass('Sys.Net.XMLHttpExecutor', Sys.Net.WebRequestExecutor); + +Sys.Net._WebRequestManager = function Sys$Net$_WebRequestManager() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._defaultTimeout = 0; + this._defaultExecutorType = "Sys.Net.XMLHttpExecutor"; +} + function Sys$Net$_WebRequestManager$add_invokingRequest(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().addHandler("invokingRequest", handler); + } + function Sys$Net$_WebRequestManager$remove_invokingRequest(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().removeHandler("invokingRequest", handler); + } + function Sys$Net$_WebRequestManager$add_completedRequest(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().addHandler("completedRequest", handler); + } + function Sys$Net$_WebRequestManager$remove_completedRequest(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().removeHandler("completedRequest", handler); + } + function Sys$Net$_WebRequestManager$_get_eventHandlerList() { + if (!this._events) { + this._events = new Sys.EventHandlerList(); + } + return this._events; + } + function Sys$Net$_WebRequestManager$get_defaultTimeout() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._defaultTimeout; + } + function Sys$Net$_WebRequestManager$set_defaultTimeout(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Number}]); + if (e) throw e; + if (value < 0) { + throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout); + } + this._defaultTimeout = value; + } + function Sys$Net$_WebRequestManager$get_defaultExecutorType() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._defaultExecutorType; + } + function Sys$Net$_WebRequestManager$set_defaultExecutorType(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._defaultExecutorType = value; + } + function Sys$Net$_WebRequestManager$executeRequest(webRequest) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "webRequest", type: Sys.Net.WebRequest} + ]); + if (e) throw e; + var executor = webRequest.get_executor(); + if (!executor) { + var failed = false; + try { + var executorType = eval(this._defaultExecutorType); + executor = new executorType(); + } catch (e) { + failed = true; + } + if (failed || !Sys.Net.WebRequestExecutor.isInstanceOfType(executor) || !executor) { + throw Error.argument("defaultExecutorType", String.format(Sys.Res.invalidExecutorType, this._defaultExecutorType)); + } + webRequest.set_executor(executor); + } + if (executor.get_aborted()) { + return; + } + var evArgs = new Sys.Net.NetworkRequestEventArgs(webRequest); + var handler = this._get_eventHandlerList().getHandler("invokingRequest"); + if (handler) { + handler(this, evArgs); + } + if (!evArgs.get_cancel()) { + executor.executeRequest(); + } + } +Sys.Net._WebRequestManager.prototype = { + add_invokingRequest: Sys$Net$_WebRequestManager$add_invokingRequest, + remove_invokingRequest: Sys$Net$_WebRequestManager$remove_invokingRequest, + add_completedRequest: Sys$Net$_WebRequestManager$add_completedRequest, + remove_completedRequest: Sys$Net$_WebRequestManager$remove_completedRequest, + _get_eventHandlerList: Sys$Net$_WebRequestManager$_get_eventHandlerList, + get_defaultTimeout: Sys$Net$_WebRequestManager$get_defaultTimeout, + set_defaultTimeout: Sys$Net$_WebRequestManager$set_defaultTimeout, + get_defaultExecutorType: Sys$Net$_WebRequestManager$get_defaultExecutorType, + set_defaultExecutorType: Sys$Net$_WebRequestManager$set_defaultExecutorType, + executeRequest: Sys$Net$_WebRequestManager$executeRequest +} +Sys.Net._WebRequestManager.registerClass('Sys.Net._WebRequestManager'); +Sys.Net.WebRequestManager = new Sys.Net._WebRequestManager(); + +Sys.Net.NetworkRequestEventArgs = function Sys$Net$NetworkRequestEventArgs(webRequest) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "webRequest", type: Sys.Net.WebRequest} + ]); + if (e) throw e; + Sys.Net.NetworkRequestEventArgs.initializeBase(this); + this._webRequest = webRequest; +} + function Sys$Net$NetworkRequestEventArgs$get_webRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._webRequest; + } +Sys.Net.NetworkRequestEventArgs.prototype = { + get_webRequest: Sys$Net$NetworkRequestEventArgs$get_webRequest +} +Sys.Net.NetworkRequestEventArgs.registerClass('Sys.Net.NetworkRequestEventArgs', Sys.CancelEventArgs); + +Sys.Net.WebRequest = function Sys$Net$WebRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._url = ""; + this._headers = { }; + this._body = null; + this._userContext = null; + this._httpVerb = null; + this._executor = null; + this._invokeCalled = false; + this._timeout = 0; +} + function Sys$Net$WebRequest$add_completed(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().addHandler("completed", handler); + } + function Sys$Net$WebRequest$remove_completed(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().removeHandler("completed", handler); + } + function Sys$Net$WebRequest$completed(eventArgs) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventArgs", type: Sys.EventArgs} + ]); + if (e) throw e; + var handler = Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest"); + if (handler) { + handler(this._executor, eventArgs); + } + handler = this._get_eventHandlerList().getHandler("completed"); + if (handler) { + handler(this._executor, eventArgs); + } + } + function Sys$Net$WebRequest$_get_eventHandlerList() { + if (!this._events) { + this._events = new Sys.EventHandlerList(); + } + return this._events; + } + function Sys$Net$WebRequest$get_url() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._url; + } + function Sys$Net$WebRequest$set_url(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._url = value; + } + function Sys$Net$WebRequest$get_headers() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._headers; + } + function Sys$Net$WebRequest$get_httpVerb() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._httpVerb === null) { + if (this._body === null) { + return "GET"; + } + return "POST"; + } + return this._httpVerb; + } + function Sys$Net$WebRequest$set_httpVerb(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + if (value.length === 0) { + throw Error.argument('value', Sys.Res.invalidHttpVerb); + } + this._httpVerb = value; + } + function Sys$Net$WebRequest$get_body() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._body; + } + function Sys$Net$WebRequest$set_body(value) { + var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]); + if (e) throw e; + this._body = value; + } + function Sys$Net$WebRequest$get_userContext() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._userContext; + } + function Sys$Net$WebRequest$set_userContext(value) { + var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]); + if (e) throw e; + this._userContext = value; + } + function Sys$Net$WebRequest$get_executor() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._executor; + } + function Sys$Net$WebRequest$set_executor(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Sys.Net.WebRequestExecutor}]); + if (e) throw e; + if (this._executor !== null && this._executor.get_started()) { + throw Error.invalidOperation(Sys.Res.setExecutorAfterActive); + } + this._executor = value; + this._executor._set_webRequest(this); + } + function Sys$Net$WebRequest$get_timeout() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._timeout === 0) { + return Sys.Net.WebRequestManager.get_defaultTimeout(); + } + return this._timeout; + } + function Sys$Net$WebRequest$set_timeout(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Number}]); + if (e) throw e; + if (value < 0) { + throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout); + } + this._timeout = value; + } + function Sys$Net$WebRequest$getResolvedUrl() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return Sys.Net.WebRequest._resolveUrl(this._url); + } + function Sys$Net$WebRequest$invoke() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._invokeCalled) { + throw Error.invalidOperation(Sys.Res.invokeCalledTwice); + } + Sys.Net.WebRequestManager.executeRequest(this); + this._invokeCalled = true; + } +Sys.Net.WebRequest.prototype = { + add_completed: Sys$Net$WebRequest$add_completed, + remove_completed: Sys$Net$WebRequest$remove_completed, + completed: Sys$Net$WebRequest$completed, + _get_eventHandlerList: Sys$Net$WebRequest$_get_eventHandlerList, + get_url: Sys$Net$WebRequest$get_url, + set_url: Sys$Net$WebRequest$set_url, + get_headers: Sys$Net$WebRequest$get_headers, + get_httpVerb: Sys$Net$WebRequest$get_httpVerb, + set_httpVerb: Sys$Net$WebRequest$set_httpVerb, + get_body: Sys$Net$WebRequest$get_body, + set_body: Sys$Net$WebRequest$set_body, + get_userContext: Sys$Net$WebRequest$get_userContext, + set_userContext: Sys$Net$WebRequest$set_userContext, + get_executor: Sys$Net$WebRequest$get_executor, + set_executor: Sys$Net$WebRequest$set_executor, + get_timeout: Sys$Net$WebRequest$get_timeout, + set_timeout: Sys$Net$WebRequest$set_timeout, + getResolvedUrl: Sys$Net$WebRequest$getResolvedUrl, + invoke: Sys$Net$WebRequest$invoke +} +Sys.Net.WebRequest._resolveUrl = function Sys$Net$WebRequest$_resolveUrl(url, baseUrl) { + if (url && url.indexOf('://') !== -1) { + return url; + } + if (!baseUrl || baseUrl.length === 0) { + var baseElement = document.getElementsByTagName('base')[0]; + if (baseElement && baseElement.href && baseElement.href.length > 0) { + baseUrl = baseElement.href; + } + else { + baseUrl = document.URL; + } + } + var qsStart = baseUrl.indexOf('?'); + if (qsStart !== -1) { + baseUrl = baseUrl.substr(0, qsStart); + } + qsStart = baseUrl.indexOf('#'); + if (qsStart !== -1) { + baseUrl = baseUrl.substr(0, qsStart); + } + baseUrl = baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1); + if (!url || url.length === 0) { + return baseUrl; + } + if (url.charAt(0) === '/') { + var slashslash = baseUrl.indexOf('://'); + if (slashslash === -1) { + throw Error.argument("baseUrl", Sys.Res.badBaseUrl1); + } + var nextSlash = baseUrl.indexOf('/', slashslash + 3); + if (nextSlash === -1) { + throw Error.argument("baseUrl", Sys.Res.badBaseUrl2); + } + return baseUrl.substr(0, nextSlash) + url; + } + else { + var lastSlash = baseUrl.lastIndexOf('/'); + if (lastSlash === -1) { + throw Error.argument("baseUrl", Sys.Res.badBaseUrl3); + } + return baseUrl.substr(0, lastSlash+1) + url; + } +} +Sys.Net.WebRequest._createQueryString = function Sys$Net$WebRequest$_createQueryString(queryString, encodeMethod, addParams) { + encodeMethod = encodeMethod || encodeURIComponent; + var i = 0, obj, val, arg, sb = new Sys.StringBuilder(); + if (queryString) { + for (arg in queryString) { + obj = queryString[arg]; + if (typeof(obj) === "function") continue; + val = Sys.Serialization.JavaScriptSerializer.serialize(obj); + if (i++) { + sb.append('&'); + } + sb.append(arg); + sb.append('='); + sb.append(encodeMethod(val)); + } + } + if (addParams) { + if (i) { + sb.append('&'); + } + sb.append(addParams); + } + return sb.toString(); +} +Sys.Net.WebRequest._createUrl = function Sys$Net$WebRequest$_createUrl(url, queryString, addParams) { + if (!queryString && !addParams) { + return url; + } + var qs = Sys.Net.WebRequest._createQueryString(queryString, null, addParams); + return qs.length + ? url + ((url && url.indexOf('?') >= 0) ? "&" : "?") + qs + : url; +} +Sys.Net.WebRequest.registerClass('Sys.Net.WebRequest'); + +Sys._ScriptLoaderTask = function Sys$_ScriptLoaderTask(scriptElement, completedCallback) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "scriptElement", domElement: true}, + {name: "completedCallback", type: Function} + ]); + if (e) throw e; + this._scriptElement = scriptElement; + this._completedCallback = completedCallback; +} + function Sys$_ScriptLoaderTask$get_scriptElement() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._scriptElement; + } + function Sys$_ScriptLoaderTask$dispose() { + if(this._disposed) { + return; + } + this._disposed = true; + this._removeScriptElementHandlers(); + Sys._ScriptLoaderTask._clearScript(this._scriptElement); + this._scriptElement = null; + } + function Sys$_ScriptLoaderTask$execute() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._addScriptElementHandlers(); + var headElements = document.getElementsByTagName('head'); + if (headElements.length === 0) { + throw new Error.invalidOperation(Sys.Res.scriptLoadFailedNoHead); + } + else { + headElements[0].appendChild(this._scriptElement); + } + } + function Sys$_ScriptLoaderTask$_addScriptElementHandlers() { + this._scriptLoadDelegate = Function.createDelegate(this, this._scriptLoadHandler); + + if (Sys.Browser.agent !== Sys.Browser.InternetExplorer) { + this._scriptElement.readyState = 'loaded'; + $addHandler(this._scriptElement, 'load', this._scriptLoadDelegate); + } + else { + $addHandler(this._scriptElement, 'readystatechange', this._scriptLoadDelegate); + } + if (this._scriptElement.addEventListener) { + this._scriptErrorDelegate = Function.createDelegate(this, this._scriptErrorHandler); + this._scriptElement.addEventListener('error', this._scriptErrorDelegate, false); + } + } + function Sys$_ScriptLoaderTask$_removeScriptElementHandlers() { + if(this._scriptLoadDelegate) { + var scriptElement = this.get_scriptElement(); + if (Sys.Browser.agent !== Sys.Browser.InternetExplorer) { + $removeHandler(scriptElement, 'load', this._scriptLoadDelegate); + } + else { + $removeHandler(scriptElement, 'readystatechange', this._scriptLoadDelegate); + } + if (this._scriptErrorDelegate) { + this._scriptElement.removeEventListener('error', this._scriptErrorDelegate, false); + this._scriptErrorDelegate = null; + } + this._scriptLoadDelegate = null; + } + } + function Sys$_ScriptLoaderTask$_scriptErrorHandler() { + if(this._disposed) { + return; + } + + this._completedCallback(this.get_scriptElement(), false); + } + function Sys$_ScriptLoaderTask$_scriptLoadHandler() { + if(this._disposed) { + return; + } + var scriptElement = this.get_scriptElement(); + if ((scriptElement.readyState !== 'loaded') && + (scriptElement.readyState !== 'complete')) { + return; + } + + this._completedCallback(scriptElement, true); + } +Sys._ScriptLoaderTask.prototype = { + get_scriptElement: Sys$_ScriptLoaderTask$get_scriptElement, + dispose: Sys$_ScriptLoaderTask$dispose, + execute: Sys$_ScriptLoaderTask$execute, + _addScriptElementHandlers: Sys$_ScriptLoaderTask$_addScriptElementHandlers, + _removeScriptElementHandlers: Sys$_ScriptLoaderTask$_removeScriptElementHandlers, + _scriptErrorHandler: Sys$_ScriptLoaderTask$_scriptErrorHandler, + _scriptLoadHandler: Sys$_ScriptLoaderTask$_scriptLoadHandler +} +Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask", null, Sys.IDisposable); +Sys._ScriptLoaderTask._clearScript = function Sys$_ScriptLoaderTask$_clearScript(scriptElement) { + if (!Sys.Debug.isDebug) { + scriptElement.parentNode.removeChild(scriptElement); + } +} +Type.registerNamespace('Sys.Net'); + +Sys.Net.WebServiceProxy = function Sys$Net$WebServiceProxy() { +} + function Sys$Net$WebServiceProxy$get_timeout() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._timeout || 0; + } + function Sys$Net$WebServiceProxy$set_timeout(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Number}]); + if (e) throw e; + if (value < 0) { throw Error.argumentOutOfRange('value', value, Sys.Res.invalidTimeout); } + this._timeout = value; + } + function Sys$Net$WebServiceProxy$get_defaultUserContext() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return (typeof(this._userContext) === "undefined") ? null : this._userContext; + } + function Sys$Net$WebServiceProxy$set_defaultUserContext(value) { + var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]); + if (e) throw e; + this._userContext = value; + } + function Sys$Net$WebServiceProxy$get_defaultSucceededCallback() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._succeeded || null; + } + function Sys$Net$WebServiceProxy$set_defaultSucceededCallback(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); + if (e) throw e; + this._succeeded = value; + } + function Sys$Net$WebServiceProxy$get_defaultFailedCallback() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._failed || null; + } + function Sys$Net$WebServiceProxy$set_defaultFailedCallback(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); + if (e) throw e; + this._failed = value; + } + function Sys$Net$WebServiceProxy$get_enableJsonp() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return !!this._jsonp; + } + function Sys$Net$WebServiceProxy$set_enableJsonp(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); + if (e) throw e; + this._jsonp = value; + } + function Sys$Net$WebServiceProxy$get_path() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._path || null; + } + function Sys$Net$WebServiceProxy$set_path(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._path = value; + } + function Sys$Net$WebServiceProxy$get_jsonpCallbackParameter() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._callbackParameter || "callback"; + } + function Sys$Net$WebServiceProxy$set_jsonpCallbackParameter(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._callbackParameter = value; + } + function Sys$Net$WebServiceProxy$_invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "servicePath", type: String}, + {name: "methodName", type: String}, + {name: "useGet", type: Boolean}, + {name: "params"}, + {name: "onSuccess", type: Function, mayBeNull: true, optional: true}, + {name: "onFailure", type: Function, mayBeNull: true, optional: true}, + {name: "userContext", mayBeNull: true, optional: true} + ]); + if (e) throw e; + onSuccess = onSuccess || this.get_defaultSucceededCallback(); + onFailure = onFailure || this.get_defaultFailedCallback(); + if (userContext === null || typeof userContext === 'undefined') userContext = this.get_defaultUserContext(); + return Sys.Net.WebServiceProxy.invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, this.get_timeout(), this.get_enableJsonp(), this.get_jsonpCallbackParameter()); + } +Sys.Net.WebServiceProxy.prototype = { + get_timeout: Sys$Net$WebServiceProxy$get_timeout, + set_timeout: Sys$Net$WebServiceProxy$set_timeout, + get_defaultUserContext: Sys$Net$WebServiceProxy$get_defaultUserContext, + set_defaultUserContext: Sys$Net$WebServiceProxy$set_defaultUserContext, + get_defaultSucceededCallback: Sys$Net$WebServiceProxy$get_defaultSucceededCallback, + set_defaultSucceededCallback: Sys$Net$WebServiceProxy$set_defaultSucceededCallback, + get_defaultFailedCallback: Sys$Net$WebServiceProxy$get_defaultFailedCallback, + set_defaultFailedCallback: Sys$Net$WebServiceProxy$set_defaultFailedCallback, + get_enableJsonp: Sys$Net$WebServiceProxy$get_enableJsonp, + set_enableJsonp: Sys$Net$WebServiceProxy$set_enableJsonp, + get_path: Sys$Net$WebServiceProxy$get_path, + set_path: Sys$Net$WebServiceProxy$set_path, + get_jsonpCallbackParameter: Sys$Net$WebServiceProxy$get_jsonpCallbackParameter, + set_jsonpCallbackParameter: Sys$Net$WebServiceProxy$set_jsonpCallbackParameter, + _invoke: Sys$Net$WebServiceProxy$_invoke +} +Sys.Net.WebServiceProxy.registerClass('Sys.Net.WebServiceProxy'); +Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout, enableJsonp, jsonpCallbackParameter) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "servicePath", type: String}, + {name: "methodName", type: String, mayBeNull: true, optional: true}, + {name: "useGet", type: Boolean, optional: true}, + {name: "params", mayBeNull: true, optional: true}, + {name: "onSuccess", type: Function, mayBeNull: true, optional: true}, + {name: "onFailure", type: Function, mayBeNull: true, optional: true}, + {name: "userContext", mayBeNull: true, optional: true}, + {name: "timeout", type: Number, optional: true}, + {name: "enableJsonp", type: Boolean, mayBeNull: true, optional: true}, + {name: "jsonpCallbackParameter", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var schemeHost = (enableJsonp !== false) ? Sys.Net.WebServiceProxy._xdomain.exec(servicePath) : null, + tempCallback, jsonp = schemeHost && (schemeHost.length === 3) && + ((schemeHost[1] !== location.protocol) || (schemeHost[2] !== location.host)); + useGet = jsonp || useGet; + if (jsonp) { + jsonpCallbackParameter = jsonpCallbackParameter || "callback"; + tempCallback = "_jsonp" + Sys._jsonp++; + } + if (!params) params = {}; + var urlParams = params; + if (!useGet || !urlParams) urlParams = {}; + var script, error, timeoutcookie = null, loader, body = null, + url = Sys.Net.WebRequest._createUrl(methodName + ? (servicePath+"/"+encodeURIComponent(methodName)) + : servicePath, urlParams, jsonp ? (jsonpCallbackParameter + "=Sys." + tempCallback) : null); + if (jsonp) { + script = document.createElement("script"); + script.src = url; + loader = new Sys._ScriptLoaderTask(script, function(script, loaded) { + if (!loaded || tempCallback) { + jsonpComplete({ Message: String.format(Sys.Res.webServiceFailedNoMsg, methodName) }, -1); + } + }); + function jsonpComplete(data, statusCode) { + if (timeoutcookie !== null) { + window.clearTimeout(timeoutcookie); + timeoutcookie = null; + } + loader.dispose(); + delete Sys[tempCallback]; + tempCallback = null; + if ((typeof(statusCode) !== "undefined") && (statusCode !== 200)) { + if (onFailure) { + error = new Sys.Net.WebServiceError(false, + data.Message || String.format(Sys.Res.webServiceFailedNoMsg, methodName), + data.StackTrace || null, + data.ExceptionType || null, + data); + error._statusCode = statusCode; + onFailure(error, userContext, methodName); + } + else { + if (data.StackTrace && data.Message) { + error = data.StackTrace + "-- " + data.Message; + } + else { + error = data.StackTrace || data.Message; + } + error = String.format(error ? Sys.Res.webServiceFailed : Sys.Res.webServiceFailedNoMsg, methodName, error); + throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error)); + } + } + else if (onSuccess) { + onSuccess(data, userContext, methodName); + } + } + Sys[tempCallback] = jsonpComplete; + loader.execute(); + return null; + } + var request = new Sys.Net.WebRequest(); + request.set_url(url); + request.get_headers()['Content-Type'] = 'application/json; charset=utf-8'; + if (!useGet) { + body = Sys.Serialization.JavaScriptSerializer.serialize(params); + if (body === "{}") body = ""; + } + request.set_body(body); + request.add_completed(onComplete); + if (timeout && timeout > 0) request.set_timeout(timeout); + request.invoke(); + + function onComplete(response, eventArgs) { + if (response.get_responseAvailable()) { + var statusCode = response.get_statusCode(); + var result = null; + + try { + var contentType = response.getResponseHeader("Content-Type"); + if (contentType.startsWith("application/json")) { + result = response.get_object(); + } + else if (contentType.startsWith("text/xml")) { + result = response.get_xml(); + } + else { + result = response.get_responseData(); + } + } catch (ex) { + } + var error = response.getResponseHeader("jsonerror"); + var errorObj = (error === "true"); + if (errorObj) { + if (result) { + result = new Sys.Net.WebServiceError(false, result.Message, result.StackTrace, result.ExceptionType, result); + } + } + else if (contentType.startsWith("application/json")) { + result = (!result || (typeof(result.d) === "undefined")) ? result : result.d; + } + if (((statusCode < 200) || (statusCode >= 300)) || errorObj) { + if (onFailure) { + if (!result || !errorObj) { + result = new Sys.Net.WebServiceError(false , String.format(Sys.Res.webServiceFailedNoMsg, methodName)); + } + result._statusCode = statusCode; + onFailure(result, userContext, methodName); + } + else { + if (result && errorObj) { + error = result.get_exceptionType() + "-- " + result.get_message(); + } + else { + error = response.get_responseData(); + } + throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error)); + } + } + else if (onSuccess) { + onSuccess(result, userContext, methodName); + } + } + else { + var msg; + if (response.get_timedOut()) { + msg = String.format(Sys.Res.webServiceTimedOut, methodName); + } + else { + msg = String.format(Sys.Res.webServiceFailedNoMsg, methodName) + } + if (onFailure) { + onFailure(new Sys.Net.WebServiceError(response.get_timedOut(), msg, "", ""), userContext, methodName); + } + else { + throw Sys.Net.WebServiceProxy._createFailedError(methodName, msg); + } + } + } + return request; +} +Sys.Net.WebServiceProxy._createFailedError = function Sys$Net$WebServiceProxy$_createFailedError(methodName, errorMessage) { + var displayMessage = "Sys.Net.WebServiceFailedException: " + errorMessage; + var e = Error.create(displayMessage, { 'name': 'Sys.Net.WebServiceFailedException', 'methodName': methodName }); + e.popStackFrame(); + return e; +} +Sys.Net.WebServiceProxy._defaultFailedCallback = function Sys$Net$WebServiceProxy$_defaultFailedCallback(err, methodName) { + var error = err.get_exceptionType() + "-- " + err.get_message(); + throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error)); +} +Sys.Net.WebServiceProxy._generateTypedConstructor = function Sys$Net$WebServiceProxy$_generateTypedConstructor(type) { + return function(properties) { + if (properties) { + for (var name in properties) { + this[name] = properties[name]; + } + } + this.__type = type; + } +} +Sys._jsonp = 0; +Sys.Net.WebServiceProxy._xdomain = /^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/; + +Sys.Net.WebServiceError = function Sys$Net$WebServiceError(timedOut, message, stackTrace, exceptionType, errorObject) { + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "timedOut", type: Boolean}, + {name: "message", type: String, mayBeNull: true}, + {name: "stackTrace", type: String, mayBeNull: true, optional: true}, + {name: "exceptionType", type: String, mayBeNull: true, optional: true}, + {name: "errorObject", type: Object, mayBeNull: true, optional: true} + ]); + if (e) throw e; + this._timedOut = timedOut; + this._message = message; + this._stackTrace = stackTrace; + this._exceptionType = exceptionType; + this._errorObject = errorObject; + this._statusCode = -1; +} + function Sys$Net$WebServiceError$get_timedOut() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._timedOut; + } + function Sys$Net$WebServiceError$get_statusCode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._statusCode; + } + function Sys$Net$WebServiceError$get_message() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._message; + } + function Sys$Net$WebServiceError$get_stackTrace() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._stackTrace || ""; + } + function Sys$Net$WebServiceError$get_exceptionType() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._exceptionType || ""; + } + function Sys$Net$WebServiceError$get_errorObject() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._errorObject || null; + } +Sys.Net.WebServiceError.prototype = { + get_timedOut: Sys$Net$WebServiceError$get_timedOut, + get_statusCode: Sys$Net$WebServiceError$get_statusCode, + get_message: Sys$Net$WebServiceError$get_message, + get_stackTrace: Sys$Net$WebServiceError$get_stackTrace, + get_exceptionType: Sys$Net$WebServiceError$get_exceptionType, + get_errorObject: Sys$Net$WebServiceError$get_errorObject +} +Sys.Net.WebServiceError.registerClass('Sys.Net.WebServiceError'); + + +Type.registerNamespace('Sys'); + +Sys.Res={ +'urlMustBeLessThan1024chars':'The history state must be small enough to not make the url larger than 1024 characters.', +'argumentTypeName':'Value is not the name of an existing type.', +'cantBeCalledAfterDispose':'Can\'t be called after dispose.', +'componentCantSetIdAfterAddedToApp':'The id property of a component can\'t be set after it\'s been added to the Application object.', +'behaviorDuplicateName':'A behavior with name \'{0}\' already exists or it is the name of an existing property on the target element.', +'notATypeName':'Value is not a valid type name.', +'elementNotFound':'An element with id \'{0}\' could not be found.', +'stateMustBeStringDictionary':'The state object can only have null and string fields.', +'boolTrueOrFalse':'Value must be \'true\' or \'false\'.', +'scriptLoadFailedNoHead':'ScriptLoader requires pages to contain a element.', +'stringFormatInvalid':'The format string is invalid.', +'referenceNotFound':'Component \'{0}\' was not found.', +'enumReservedName':'\'{0}\' is a reserved name that can\'t be used as an enum value name.', +'circularParentChain':'The chain of control parents can\'t have circular references.', +'namespaceContainsNonObject':'Object {0} already exists and is not an object.', +'undefinedEvent':'\'{0}\' is not an event.', +'propertyUndefined':'\'{0}\' is not a property or an existing field.', +'observableConflict':'Object already contains a member with the name \'{0}\'.', +'historyCannotEnableHistory':'Cannot set enableHistory after initialization.', +'eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.', +'scriptLoadFailedDebug':'The script \'{0}\' failed to load. Check for:\r\n Inaccessible path.\r\n Script errors. (IE) Enable \'Display a notification about every script error\' under advanced settings.', +'propertyNotWritable':'\'{0}\' is not a writable property.', +'enumInvalidValueName':'\'{0}\' is not a valid name for an enum value.', +'controlAlreadyDefined':'A control is already associated with the element.', +'addHandlerCantBeUsedForError':'Can\'t add a handler for the error event using this method. Please set the window.onerror property instead.', +'cantAddNonFunctionhandler':'Can\'t add a handler that is not a function.', +'invalidNameSpace':'Value is not a valid namespace identifier.', +'notAnInterface':'Value is not a valid interface.', +'eventHandlerNotFunction':'Handler must be a function.', +'propertyNotAnArray':'\'{0}\' is not an Array property.', +'namespaceContainsClass':'Object {0} already exists as a class, enum, or interface.', +'typeRegisteredTwice':'Type {0} has already been registered. The type may be defined multiple times or the script file that defines it may have already been loaded. A possible cause is a change of settings during a partial update.', +'cantSetNameAfterInit':'The name property can\'t be set on this object after initialization.', +'historyMissingFrame':'For the history feature to work in IE, the page must have an iFrame element with id \'__historyFrame\' pointed to a page that gets its title from the \'title\' query string parameter and calls Sys.Application._onIFrameLoad() on the parent window. This can be done by setting EnableHistory to true on ScriptManager.', +'appDuplicateComponent':'Two components with the same id \'{0}\' can\'t be added to the application.', +'historyCannotAddHistoryPointWithHistoryDisabled':'A history point can only be added if enableHistory is set to true.', +'baseNotAClass':'Value is not a class.', +'expectedElementOrId':'Value must be a DOM element or DOM element Id.', +'methodNotFound':'No method found with name \'{0}\'.', +'arrayParseBadFormat':'Value must be a valid string representation for an array. It must start with a \'[\' and end with a \']\'.', +'stateFieldNameInvalid':'State field names must not contain any \'=\' characters.', +'cantSetId':'The id property can\'t be set on this object.', +'stringFormatBraceMismatch':'The format string contains an unmatched opening or closing brace.', +'enumValueNotInteger':'An enumeration definition can only contain integer values.', +'propertyNullOrUndefined':'Cannot set the properties of \'{0}\' because it returned a null value.', +'argumentDomNode':'Value must be a DOM element or a text node.', +'componentCantSetIdTwice':'The id property of a component can\'t be set more than once.', +'createComponentOnDom':'Value must be null for Components that are not Controls or Behaviors.', +'createNotComponent':'{0} does not derive from Sys.Component.', +'createNoDom':'Value must not be null for Controls and Behaviors.', +'cantAddWithoutId':'Can\'t add a component that doesn\'t have an id.', +'notObservable':'Instances of type \'{0}\' cannot be observed.', +'badTypeName':'Value is not the name of the type being registered or the name is a reserved word.', +'argumentInteger':'Value must be an integer.', +'invokeCalledTwice':'Cannot call invoke more than once.', +'webServiceFailed':'The server method \'{0}\' failed with the following error: {1}', +'argumentType':'Object cannot be converted to the required type.', +'argumentNull':'Value cannot be null.', +'scriptAlreadyLoaded':'The script \'{0}\' has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.', +'scriptDependencyNotFound':'The script \'{0}\' failed to load because it is dependent on script \'{1}\'.', +'formatBadFormatSpecifier':'Format specifier was invalid.', +'requiredScriptReferenceNotIncluded':'\'{0}\' requires that you have included a script reference to \'{1}\'.', +'webServiceFailedNoMsg':'The server method \'{0}\' failed.', +'argumentDomElement':'Value must be a DOM element.', +'invalidExecutorType':'Could not create a valid Sys.Net.WebRequestExecutor from: {0}.', +'cannotCallBeforeResponse':'Cannot call {0} when responseAvailable is false.', +'actualValue':'Actual value was {0}.', +'enumInvalidValue':'\'{0}\' is not a valid value for enum {1}.', +'scriptLoadFailed':'The script \'{0}\' could not be loaded.', +'parameterCount':'Parameter count mismatch.', +'cannotDeserializeEmptyString':'Cannot deserialize empty string.', +'formatInvalidString':'Input string was not in a correct format.', +'invalidTimeout':'Value must be greater than or equal to zero.', +'cannotAbortBeforeStart':'Cannot abort when executor has not started.', +'argument':'Value does not fall within the expected range.', +'cannotDeserializeInvalidJson':'Cannot deserialize. The data does not correspond to valid JSON.', +'invalidHttpVerb':'httpVerb cannot be set to an empty or null string.', +'nullWebRequest':'Cannot call executeRequest with a null webRequest.', +'eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.', +'cannotSerializeNonFiniteNumbers':'Cannot serialize non finite numbers.', +'argumentUndefined':'Value cannot be undefined.', +'webServiceInvalidReturnType':'The server method \'{0}\' returned an invalid type. Expected type: {1}', +'servicePathNotSet':'The path to the web service has not been set.', +'argumentTypeWithTypes':'Object of type \'{0}\' cannot be converted to type \'{1}\'.', +'cannotCallOnceStarted':'Cannot call {0} once started.', +'badBaseUrl1':'Base URL does not contain ://.', +'badBaseUrl2':'Base URL does not contain another /.', +'badBaseUrl3':'Cannot find last / in base URL.', +'setExecutorAfterActive':'Cannot set executor after it has become active.', +'paramName':'Parameter name: {0}', +'nullReferenceInPath':'Null reference while evaluating data path: \'{0}\'.', +'cannotCallOutsideHandler':'Cannot call {0} outside of a completed event handler.', +'cannotSerializeObjectWithCycle':'Cannot serialize object with cyclic reference within child properties.', +'format':'One of the identified items was in an invalid format.', +'assertFailedCaller':'Assertion Failed: {0}\r\nat {1}', +'argumentOutOfRange':'Specified argument was out of the range of valid values.', +'webServiceTimedOut':'The server method \'{0}\' timed out.', +'notImplemented':'The method or operation is not implemented.', +'assertFailed':'Assertion Failed: {0}', +'invalidOperation':'Operation is not valid due to the current state of the object.', +'breakIntoDebugger':'{0}\r\n\r\nBreak into debugger?' +}; diff --git a/Web/Scripts/MicrosoftAjax.js b/Web/Scripts/MicrosoftAjax.js new file mode 100644 index 0000000..52e6626 --- /dev/null +++ b/Web/Scripts/MicrosoftAjax.js @@ -0,0 +1,6 @@ +//---------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//---------------------------------------------------------- +// MicrosoftAjax.js +Function.__typeName="Function";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(eb){c=true;for(a=0;a0&&(d=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e==="undefined")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" Firefox/")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\/(\d+\.\d+)/)[1]);Sys.Browser.name="Firefox";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" AppleWebKit/")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\/(\d+(\.\d+)?)/)[1]);Sys.Browser.name="Safari"}else if(navigator.userAgent.indexOf("Opera/")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass("Sys.EventArgs");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass("Sys.CancelEventArgs",Sys.EventArgs);Type.registerNamespace("Sys.UI");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!=="undefined"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value+=b+"\n"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value=""},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval("debugger")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:"traceDump";b=b?b:"";if(a===null){this.trace(b+c+": null");return}switch(typeof a){case "undefined":this.trace(b+c+": Undefined");break;case "number":case "string":case "boolean":this.trace(b+c+": "+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+": "+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+": ...");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName==="string"){var k=a.tagName?a.tagName:"DomElement";if(a.id)k+=" - "+a.id;this.trace(b+c+" {"+k+"}")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i==="string"?" {"+i+"}":""));if(b===""||f){b+=" ";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e=0;d--){var k=h[d].trim();b=a[k];if(typeof b!=="number")throw Error.argument("value",String.format(Sys.Res.enumInvalidValue,c.split(",")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(", ")}return ""}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!=="number")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!=="number")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass("Sys.CollectionChange");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum("Sys.NotifyCollectionChangedAction");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass("Sys.Observer");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,"propertyChanged",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,"propertyChanged",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,"")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(".");for(var i=0,m=d.length-1;i-1&&ac.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g,"\\\\$1");var a=new Sys.StringBuilder("^"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case "dddd":case "ddd":case "MMMM":case "MMM":case "gg":case "g":a.append("(\\D+)");break;case "tt":case "t":a.append("(\\D*)");break;case "yyyy":a.append("(\\d{4})");break;case "fff":a.append("(\\d{3})");break;case "ff":a.append("(\\d{2})");break;case "f":a.append("(\\d)");break;case "dd":case "d":case "MM":case "M":case "yy":case "y":case "HH":case "H":case "hh":case "h":case "mm":case "m":case "ss":case "s":a.append("(\\d\\d?)");break;case "zzz":a.append("([+-]?\\d\\d?:\\d{2})");break;case "zz":case "z":a.append("([+-]?\\d\\d?)");break;case "/":a.append("(\\"+b.DateSeparator+")")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append("$");var k=a.toString().replace(/\s+/g,"\\s+"),g={"regExp":k,"groups":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a31)return null;break;case "MMMM":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case "MMM":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case "M":case "MM":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case "y":case "yy":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case "yyyy":e=parseInt(a,10);if(e<0||e>9999)return null;break;case "h":case "hh":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case "H":case "HH":d=parseInt(a,10);if(d<0||d>23)return null;break;case "m":case "mm":q=parseInt(a,10);if(q<0||q>59)return null;break;case "s":case "ss":r=parseInt(a,10);if(r<0||r>59)return null;break;case "tt":case "t":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case "f":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case "ff":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case "fff":f=parseInt(a,10);if(f<0||f>999)return null;break;case "dddd":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case "ddd":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case "zzz":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var o=parseInt(u[1],10);if(o<0||o>59)return null;n=h*60+(a.startsWith("-")?-o:o);break;case "z":case "zz":h=parseInt(a,10);if(h<-12||h>13)return null;n=h*60;break;case "g":case "gg":var p=a;if(!p||!g.eras)return null;p=p.toLowerCase().trim();for(var s=0,F=g.eras.length;s0)return this.toLocaleString();else return this.toString();var o=["n %","n%","%n"],n=["-n %","-n%","-%n"],p=["(n)","-n","- n","n-","n -"],m=["$n","n$","$ n","n $"],l=["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];function g(a,c,d){for(var b=a.length;b1?parseInt(e[1]):0;e=b.split(".");b=e[0];a=e.length>1?e[1]:"";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a="";var d=b.length-1,f="";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case "d":case "D":c="n";if(b!==-1)d=g(""+d,b,true);if(this<0)d=-d;break;case "c":case "C":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case "n":case "N":if(this<0)c=p[a.NumberNegativePattern];else c="n";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case "p":case "P":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\$|-|%/g,f="";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case "n":f+=d;break;case "$":f+=a.CurrencySymbol;break;case "-":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case "%":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a0)a.append(",");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append("]")}else{if(Date.isInstanceOfType(b)){a.append('"\\/Date(');a.append(b.getTime());a.append(')\\/"');break}var d=[],f=0;for(var e in b){if(e.startsWith("$"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append("{");var j=false;for(c=0;c=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!=="undefined"){this.dispose=b;this._chainDispose=null;if(a==="function")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!=="absolute")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!=="BODY"&&f!=="HTML"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i==="absolute")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c==="BODY"&&(!g||g.position!=="absolute"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!=="TABLE"&&c!=="TD"&&c!=="HTML"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c==="TABLE"&&(b.position==="relative"||b.position==="absolute")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!=="absolute")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!=="BODY"&&c!=="HTML"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=" "+d.className+" ",b=a.indexOf(" "+c+" ");if(b>=0)d.className=(a.substr(0,b)+" "+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a==="string")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position="absolute";a.left=c+"px";a.top=d+"px"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!=="hidden"&&a.display!=="none"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?"visible":"hidden";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode==="none")switch(a.tagName.toUpperCase()){case "DIV":case "P":case "ADDRESS":case "BLOCKQUOTE":case "BODY":case "COL":case "COLGROUP":case "DD":case "DL":case "DT":case "FIELDSET":case "FORM":case "H1":case "H2":case "H3":case "H4":case "H5":case "H6":case "HR":case "IFRAME":case "LEGEND":case "OL":case "PRE":case "TABLE":case "TD":case "TH":case "TR":case "UL":a._oldDisplayMode="block";break;case "LI":a._oldDisplayMode="list-item";break;default:a._oldDisplayMode="inline"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position="absolute";a.style.display="block";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display="none"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface("Sys.IContainer");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass("Sys.ApplicationLoadEventArgs",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler("init",a)},remove_init:function(a){this.get_events().removeHandler("init",a)},add_load:function(a){this.get_events().addHandler("load",a)},remove_load:function(a){this.get_events().removeHandler("load",a)},add_unload:function(a){this.get_events().addHandler("unload",a)},remove_unload:function(a){this.get_events().removeHandler("unload",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler("unload");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a=0;b--)this._disposeElementInternal(c[b]);if(!d)this._disposeElementInternal(a)}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a1000){var c=[];for(var d=0,f=b.length;d=0;b--){var c=a[b];if(typeof c.dispose==="function")c.dispose()}},_disposeElementInternal:function(a){var d=a.dispose;if(d&&typeof d==="function")a.dispose();else{var c=a.control;if(c&&typeof c.dispose==="function")c.dispose()}var b=a._behaviors;if(b)this._disposeComponents(b);b=a._components;if(b){this._disposeComponents(b);a._components=null}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,"load",c);b()};Sys.UI.DomEvent.addHandler(window,"load",c);if(document.addEventListener)try{document.addEventListener("DOMContentLoaded",a=function(){document.removeEventListener("DOMContentLoaded",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement("div");a=function(){try{d.doScroll("left")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent("onreadystatechange",a=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler("init");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass("Sys._Application",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,"get_id");if(a)return a;if(!this._element||!this._element.id)return "";return this._element.id+"$"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(".");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,"initialize");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,"dispose");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass("Sys.UI.Behavior",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b0&&a.charAt(0)==="#")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler("navigate",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler("navigate",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!=="undefined")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||"";var b=a.indexOf("&&");if(b!==-1&&b+2'");c.write(""+(b||document.title)+"parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+");");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var f=this.get_stateString();if(a!==f){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!=="undefined"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP"];for(var a=0,c=b.length;a0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a="";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf("MSIE")!==-1)a.setProperty("SelectionLanguage","XPath");if(a.documentElement.namespaceURI==="http://www.mozilla.org/newlayout/xml/parsererror.xml"&&a.documentElement.tagName==="parsererror")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName==="parsererror")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass("Sys.Net.XMLHttpExecutor",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType="Sys.Net.XMLHttpExecutor"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler("invokingRequest",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler("invokingRequest",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler("completedRequest",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler("completedRequest",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler("invokingRequest");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass("Sys.Net._WebRequestManager");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass("Sys.Net.NetworkRequestEventArgs",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url="";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler("completed",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler("completed",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler("completed");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return "GET";return "POST"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf("://")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName("base")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf("?");if(c!==-1)a=a.substr(0,c);c=a.indexOf("#");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf("/")+1);if(!b||b.length===0)return a;if(b.charAt(0)==="/"){var e=a.indexOf("://"),g=a.indexOf("/",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf("/");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e==="function")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append("&");a.append(d);a.append("=");a.append(b(g))}if(f){if(h)a.append("&");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf("?")>=0?"&":"?")+d:a};Sys.Net.WebRequest.registerClass("Sys.Net.WebRequest");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){this._addScriptElementHandlers();document.getElementsByTagName("head")[0].appendChild(this._scriptElement)},_addScriptElementHandlers:function(){this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(Sys.Browser.agent!==Sys.Browser.InternetExplorer){this._scriptElement.readyState="loaded";$addHandler(this._scriptElement,"load",this._scriptLoadDelegate)}else $addHandler(this._scriptElement,"readystatechange",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener("error",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(Sys.Browser.agent!==Sys.Browser.InternetExplorer)$removeHandler(a,"load",this._scriptLoadDelegate);else $removeHandler(a,"readystatechange",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener("error",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(a.readyState!=="loaded"&&a.readyState!=="complete")return;this._completedCallback(a,true)}};Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug)a.parentNode.removeChild(a)};Type.registerNamespace("Sys.Net");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange("value",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext==="undefined"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||"callback"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a==="undefined")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass("Sys.Net.WebServiceProxy");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||"callback";c="_jsonp"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+"/"+encodeURIComponent(a):q,r,n?p+"=Sys."+c:null);if(n){s=document.createElement("script");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!=="undefined"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()["Content-Type"]="application/json; charset=utf-8";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o==="{}")o=""}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader("Content-Type");if(e.startsWith("application/json"))c=d.get_object();else if(e.startsWith("text/xml"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader("jsonerror"),h=k==="true";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith("application/json"))c=!c||typeof c.d==="undefined"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,"",""),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||""},get_exceptionType:function(){return this._exceptionType||""},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass("Sys.Net.WebServiceError"); +Type.registerNamespace('Sys');Sys.Res={'argumentInteger':'Value must be an integer.','invokeCalledTwice':'Cannot call invoke more than once.','webServiceFailed':'The server method \'{0}\' failed with the following error: {1}','argumentType':'Object cannot be converted to the required type.','argumentNull':'Value cannot be null.','scriptAlreadyLoaded':'The script \'{0}\' has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.','scriptDependencyNotFound':'The script \'{0}\' failed to load because it is dependent on script \'{1}\'.','formatBadFormatSpecifier':'Format specifier was invalid.','requiredScriptReferenceNotIncluded':'\'{0}\' requires that you have included a script reference to \'{1}\'.','webServiceFailedNoMsg':'The server method \'{0}\' failed.','argumentDomElement':'Value must be a DOM element.','invalidExecutorType':'Could not create a valid Sys.Net.WebRequestExecutor from: {0}.','cannotCallBeforeResponse':'Cannot call {0} when responseAvailable is false.','actualValue':'Actual value was {0}.','enumInvalidValue':'\'{0}\' is not a valid value for enum {1}.','scriptLoadFailed':'The script \'{0}\' could not be loaded.','parameterCount':'Parameter count mismatch.','cannotDeserializeEmptyString':'Cannot deserialize empty string.','formatInvalidString':'Input string was not in a correct format.','invalidTimeout':'Value must be greater than or equal to zero.','cannotAbortBeforeStart':'Cannot abort when executor has not started.','argument':'Value does not fall within the expected range.','cannotDeserializeInvalidJson':'Cannot deserialize. The data does not correspond to valid JSON.','invalidHttpVerb':'httpVerb cannot be set to an empty or null string.','nullWebRequest':'Cannot call executeRequest with a null webRequest.','eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.','cannotSerializeNonFiniteNumbers':'Cannot serialize non finite numbers.','argumentUndefined':'Value cannot be undefined.','webServiceInvalidReturnType':'The server method \'{0}\' returned an invalid type. Expected type: {1}','servicePathNotSet':'The path to the web service has not been set.','argumentTypeWithTypes':'Object of type \'{0}\' cannot be converted to type \'{1}\'.','cannotCallOnceStarted':'Cannot call {0} once started.','badBaseUrl1':'Base URL does not contain ://.','badBaseUrl2':'Base URL does not contain another /.','badBaseUrl3':'Cannot find last / in base URL.','setExecutorAfterActive':'Cannot set executor after it has become active.','paramName':'Parameter name: {0}','nullReferenceInPath':'Null reference while evaluating data path: \'{0}\'.','cannotCallOutsideHandler':'Cannot call {0} outside of a completed event handler.','cannotSerializeObjectWithCycle':'Cannot serialize object with cyclic reference within child properties.','format':'One of the identified items was in an invalid format.','assertFailedCaller':'Assertion Failed: {0}\r\nat {1}','argumentOutOfRange':'Specified argument was out of the range of valid values.','webServiceTimedOut':'The server method \'{0}\' timed out.','notImplemented':'The method or operation is not implemented.','assertFailed':'Assertion Failed: {0}','invalidOperation':'Operation is not valid due to the current state of the object.','breakIntoDebugger':'{0}\r\n\r\nBreak into debugger?'}; diff --git a/Web/Scripts/MicrosoftMvcAjax.debug.js b/Web/Scripts/MicrosoftMvcAjax.debug.js new file mode 100644 index 0000000..eb68ba7 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcAjax.debug.js @@ -0,0 +1,408 @@ +//!---------------------------------------------------------- +//! Copyright (C) Microsoft Corporation. All rights reserved. +//!---------------------------------------------------------- +//! MicrosoftMvcAjax.js + +Type.registerNamespace('Sys.Mvc'); + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AjaxOptions + +Sys.Mvc.$create_AjaxOptions = function Sys_Mvc_AjaxOptions() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.InsertionMode + +Sys.Mvc.InsertionMode = function() { + /// + /// + /// + /// + /// + /// +}; +Sys.Mvc.InsertionMode.prototype = { + replace: 0, + insertBefore: 1, + insertAfter: 2 +} +Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode', false); + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AjaxContext + +Sys.Mvc.AjaxContext = function Sys_Mvc_AjaxContext(request, updateTarget, loadingElement, insertionMode) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + this._request = request; + this._updateTarget = updateTarget; + this._loadingElement = loadingElement; + this._insertionMode = insertionMode; +} +Sys.Mvc.AjaxContext.prototype = { + _insertionMode: 0, + _loadingElement: null, + _response: null, + _request: null, + _updateTarget: null, + + get_data: function Sys_Mvc_AjaxContext$get_data() { + /// + if (this._response) { + return this._response.get_responseData(); + } + else { + return null; + } + }, + + get_insertionMode: function Sys_Mvc_AjaxContext$get_insertionMode() { + /// + return this._insertionMode; + }, + + get_loadingElement: function Sys_Mvc_AjaxContext$get_loadingElement() { + /// + return this._loadingElement; + }, + + get_object: function Sys_Mvc_AjaxContext$get_object() { + /// + var executor = this.get_response(); + return (executor) ? executor.get_object() : null; + }, + + get_response: function Sys_Mvc_AjaxContext$get_response() { + /// + return this._response; + }, + set_response: function Sys_Mvc_AjaxContext$set_response(value) { + /// + this._response = value; + return value; + }, + + get_request: function Sys_Mvc_AjaxContext$get_request() { + /// + return this._request; + }, + + get_updateTarget: function Sys_Mvc_AjaxContext$get_updateTarget() { + /// + return this._updateTarget; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AsyncHyperlink + +Sys.Mvc.AsyncHyperlink = function Sys_Mvc_AsyncHyperlink() { +} +Sys.Mvc.AsyncHyperlink.handleClick = function Sys_Mvc_AsyncHyperlink$handleClick(anchor, evt, ajaxOptions) { + /// + /// + /// + /// + /// + /// + evt.preventDefault(); + Sys.Mvc.MvcHelpers._asyncRequest(anchor.href, 'post', '', anchor, ajaxOptions); +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.MvcHelpers + +Sys.Mvc.MvcHelpers = function Sys_Mvc_MvcHelpers() { +} +Sys.Mvc.MvcHelpers._serializeSubmitButton = function Sys_Mvc_MvcHelpers$_serializeSubmitButton(element, offsetX, offsetY) { + /// + /// + /// + /// + /// + /// + /// + if (element.disabled) { + return null; + } + var name = element.name; + if (name) { + var tagName = element.tagName.toUpperCase(); + var encodedName = encodeURIComponent(name); + var inputElement = element; + if (tagName === 'INPUT') { + var type = inputElement.type; + if (type === 'submit') { + return encodedName + '=' + encodeURIComponent(inputElement.value); + } + else if (type === 'image') { + return encodedName + '.x=' + offsetX + '&' + encodedName + '.y=' + offsetY; + } + } + else if ((tagName === 'BUTTON') && (name.length) && (inputElement.type === 'submit')) { + return encodedName + '=' + encodeURIComponent(inputElement.value); + } + } + return null; +} +Sys.Mvc.MvcHelpers._serializeForm = function Sys_Mvc_MvcHelpers$_serializeForm(form) { + /// + /// + /// + var formElements = form.elements; + var formBody = new Sys.StringBuilder(); + var count = formElements.length; + for (var i = 0; i < count; i++) { + var element = formElements[i]; + var name = element.name; + if (!name || !name.length) { + continue; + } + var tagName = element.tagName.toUpperCase(); + if (tagName === 'INPUT') { + var inputElement = element; + var type = inputElement.type; + if ((type === 'text') || (type === 'password') || (type === 'hidden') || (((type === 'checkbox') || (type === 'radio')) && element.checked)) { + formBody.append(encodeURIComponent(name)); + formBody.append('='); + formBody.append(encodeURIComponent(inputElement.value)); + formBody.append('&'); + } + } + else if (tagName === 'SELECT') { + var selectElement = element; + var optionCount = selectElement.options.length; + for (var j = 0; j < optionCount; j++) { + var optionElement = selectElement.options[j]; + if (optionElement.selected) { + formBody.append(encodeURIComponent(name)); + formBody.append('='); + formBody.append(encodeURIComponent(optionElement.value)); + formBody.append('&'); + } + } + } + else if (tagName === 'TEXTAREA') { + formBody.append(encodeURIComponent(name)); + formBody.append('='); + formBody.append(encodeURIComponent((element.value))); + formBody.append('&'); + } + } + var additionalInput = form._additionalInput; + if (additionalInput) { + formBody.append(additionalInput); + formBody.append('&'); + } + return formBody.toString(); +} +Sys.Mvc.MvcHelpers._asyncRequest = function Sys_Mvc_MvcHelpers$_asyncRequest(url, verb, body, triggerElement, ajaxOptions) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + if (ajaxOptions.confirm) { + if (!confirm(ajaxOptions.confirm)) { + return; + } + } + if (ajaxOptions.url) { + url = ajaxOptions.url; + } + if (ajaxOptions.httpMethod) { + verb = ajaxOptions.httpMethod; + } + if (body.length > 0 && !body.endsWith('&')) { + body += '&'; + } + body += 'X-Requested-With=XMLHttpRequest'; + var upperCaseVerb = verb.toUpperCase(); + var isGetOrPost = (upperCaseVerb === 'GET' || upperCaseVerb === 'POST'); + if (!isGetOrPost) { + body += '&'; + body += 'X-HTTP-Method-Override=' + upperCaseVerb; + } + var requestBody = ''; + if (upperCaseVerb === 'GET' || upperCaseVerb === 'DELETE') { + if (url.indexOf('?') > -1) { + if (!url.endsWith('&')) { + url += '&'; + } + url += body; + } + else { + url += '?'; + url += body; + } + } + else { + requestBody = body; + } + var request = new Sys.Net.WebRequest(); + request.set_url(url); + if (isGetOrPost) { + request.set_httpVerb(verb); + } + else { + request.set_httpVerb('POST'); + request.get_headers()['X-HTTP-Method-Override'] = upperCaseVerb; + } + request.set_body(requestBody); + if (verb.toUpperCase() === 'PUT') { + request.get_headers()['Content-Type'] = 'application/x-www-form-urlencoded;'; + } + request.get_headers()['X-Requested-With'] = 'XMLHttpRequest'; + var updateElement = null; + if (ajaxOptions.updateTargetId) { + updateElement = $get(ajaxOptions.updateTargetId); + } + var loadingElement = null; + if (ajaxOptions.loadingElementId) { + loadingElement = $get(ajaxOptions.loadingElementId); + } + var ajaxContext = new Sys.Mvc.AjaxContext(request, updateElement, loadingElement, ajaxOptions.insertionMode); + var continueRequest = true; + if (ajaxOptions.onBegin) { + continueRequest = ajaxOptions.onBegin(ajaxContext) !== false; + } + if (loadingElement) { + Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), true); + } + if (continueRequest) { + request.add_completed(Function.createDelegate(null, function(executor) { + Sys.Mvc.MvcHelpers._onComplete(request, ajaxOptions, ajaxContext); + })); + request.invoke(); + } +} +Sys.Mvc.MvcHelpers._onComplete = function Sys_Mvc_MvcHelpers$_onComplete(request, ajaxOptions, ajaxContext) { + /// + /// + /// + /// + /// + /// + ajaxContext.set_response(request.get_executor()); + if (ajaxOptions.onComplete && ajaxOptions.onComplete(ajaxContext) === false) { + return; + } + var statusCode = ajaxContext.get_response().get_statusCode(); + if ((statusCode >= 200 && statusCode < 300) || statusCode === 304 || statusCode === 1223) { + if (statusCode !== 204 && statusCode !== 304 && statusCode !== 1223) { + var contentType = ajaxContext.get_response().getResponseHeader('Content-Type'); + if ((contentType) && (contentType.indexOf('application/x-javascript') !== -1)) { + eval(ajaxContext.get_data()); + } + else { + Sys.Mvc.MvcHelpers.updateDomElement(ajaxContext.get_updateTarget(), ajaxContext.get_insertionMode(), ajaxContext.get_data()); + } + } + if (ajaxOptions.onSuccess) { + ajaxOptions.onSuccess(ajaxContext); + } + } + else { + if (ajaxOptions.onFailure) { + ajaxOptions.onFailure(ajaxContext); + } + } + if (ajaxContext.get_loadingElement()) { + Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), false); + } +} +Sys.Mvc.MvcHelpers.updateDomElement = function Sys_Mvc_MvcHelpers$updateDomElement(target, insertionMode, content) { + /// + /// + /// + /// + /// + /// + if (target) { + switch (insertionMode) { + case Sys.Mvc.InsertionMode.replace: + target.innerHTML = content; + break; + case Sys.Mvc.InsertionMode.insertBefore: + if (content && content.length > 0) { + target.innerHTML = content + target.innerHTML.trimStart(); + } + break; + case Sys.Mvc.InsertionMode.insertAfter: + if (content && content.length > 0) { + target.innerHTML = target.innerHTML.trimEnd() + content; + } + break; + } + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AsyncForm + +Sys.Mvc.AsyncForm = function Sys_Mvc_AsyncForm() { +} +Sys.Mvc.AsyncForm.handleClick = function Sys_Mvc_AsyncForm$handleClick(form, evt) { + /// + /// + /// + /// + var additionalInput = Sys.Mvc.MvcHelpers._serializeSubmitButton(evt.target, evt.offsetX, evt.offsetY); + form._additionalInput = additionalInput; +} +Sys.Mvc.AsyncForm.handleSubmit = function Sys_Mvc_AsyncForm$handleSubmit(form, evt, ajaxOptions) { + /// + /// + /// + /// + /// + /// + evt.preventDefault(); + var validationCallbacks = form.validationCallbacks; + if (validationCallbacks) { + for (var i = 0; i < validationCallbacks.length; i++) { + var callback = validationCallbacks[i]; + if (!callback()) { + return; + } + } + } + var body = Sys.Mvc.MvcHelpers._serializeForm(form); + Sys.Mvc.MvcHelpers._asyncRequest(form.action, form.method || 'post', body, form, ajaxOptions); +} + + +Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext'); +Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink'); +Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers'); +Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm'); + +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- diff --git a/Web/Scripts/MicrosoftMvcAjax.js b/Web/Scripts/MicrosoftMvcAjax.js new file mode 100644 index 0000000..c5a6165 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcAjax.js @@ -0,0 +1,25 @@ +//---------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//---------------------------------------------------------- +// MicrosoftMvcAjax.js + +Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_AjaxOptions=function(){return {};} +Sys.Mvc.InsertionMode=function(){};Sys.Mvc.InsertionMode.prototype = {replace:0,insertBefore:1,insertAfter:2} +Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode',false);Sys.Mvc.AjaxContext=function(request,updateTarget,loadingElement,insertionMode){this.$3=request;this.$4=updateTarget;this.$1=loadingElement;this.$0=insertionMode;} +Sys.Mvc.AjaxContext.prototype={$0:0,$1:null,$2:null,$3:null,$4:null,get_data:function(){if(this.$2){return this.$2.get_responseData();}else{return null;}},get_insertionMode:function(){return this.$0;},get_loadingElement:function(){return this.$1;},get_object:function(){var $0=this.get_response();return ($0)?$0.get_object():null;},get_response:function(){return this.$2;},set_response:function(value){this.$2=value;return value;},get_request:function(){return this.$3;},get_updateTarget:function(){return this.$4;}} +Sys.Mvc.AsyncHyperlink=function(){} +Sys.Mvc.AsyncHyperlink.handleClick=function(anchor,evt,ajaxOptions){evt.preventDefault();Sys.Mvc.MvcHelpers.$2(anchor.href,'post','',anchor,ajaxOptions);} +Sys.Mvc.MvcHelpers=function(){} +Sys.Mvc.MvcHelpers.$0=function($p0,$p1,$p2){if($p0.disabled){return null;}var $0=$p0.name;if($0){var $1=$p0.tagName.toUpperCase();var $2=encodeURIComponent($0);var $3=$p0;if($1==='INPUT'){var $4=$3.type;if($4==='submit'){return $2+'='+encodeURIComponent($3.value);}else if($4==='image'){return $2+'.x='+$p1+'&'+$2+'.y='+$p2;}}else if(($1==='BUTTON')&&($0.length)&&($3.type==='submit')){return $2+'='+encodeURIComponent($3.value);}}return null;} +Sys.Mvc.MvcHelpers.$1=function($p0){var $0=$p0.elements;var $1=new Sys.StringBuilder();var $2=$0.length;for(var $4=0;$4<$2;$4++){var $5=$0[$4];var $6=$5.name;if(!$6||!$6.length){continue;}var $7=$5.tagName.toUpperCase();if($7==='INPUT'){var $8=$5;var $9=$8.type;if(($9==='text')||($9==='password')||($9==='hidden')||((($9==='checkbox')||($9==='radio'))&&$5.checked)){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent($8.value));$1.append('&');}}else if($7==='SELECT'){var $A=$5;var $B=$A.options.length;for(var $C=0;$C<$B;$C++){var $D=$A.options[$C];if($D.selected){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent($D.value));$1.append('&');}}}else if($7==='TEXTAREA'){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent(($5.value)));$1.append('&');}}var $3=$p0._additionalInput;if($3){$1.append($3);$1.append('&');}return $1.toString();} +Sys.Mvc.MvcHelpers.$2=function($p0,$p1,$p2,$p3,$p4){if($p4.confirm){if(!confirm($p4.confirm)){return;}}if($p4.url){$p0=$p4.url;}if($p4.httpMethod){$p1=$p4.httpMethod;}if($p2.length>0&&!$p2.endsWith('&')){$p2+='&';}$p2+='X-Requested-With=XMLHttpRequest';var $0=$p1.toUpperCase();var $1=($0==='GET'||$0==='POST');if(!$1){$p2+='&';$p2+='X-HTTP-Method-Override='+$0;}var $2='';if($0==='GET'||$0==='DELETE'){if($p0.indexOf('?')>-1){if(!$p0.endsWith('&')){$p0+='&';}$p0+=$p2;}else{$p0+='?';$p0+=$p2;}}else{$2=$p2;}var $3=new Sys.Net.WebRequest();$3.set_url($p0);if($1){$3.set_httpVerb($p1);}else{$3.set_httpVerb('POST');$3.get_headers()['X-HTTP-Method-Override']=$0;}$3.set_body($2);if($p1.toUpperCase()==='PUT'){$3.get_headers()['Content-Type']='application/x-www-form-urlencoded;';}$3.get_headers()['X-Requested-With']='XMLHttpRequest';var $4=null;if($p4.updateTargetId){$4=$get($p4.updateTargetId);}var $5=null;if($p4.loadingElementId){$5=$get($p4.loadingElementId);}var $6=new Sys.Mvc.AjaxContext($3,$4,$5,$p4.insertionMode);var $7=true;if($p4.onBegin){$7=$p4.onBegin($6)!==false;}if($5){Sys.UI.DomElement.setVisible($6.get_loadingElement(),true);}if($7){$3.add_completed(Function.createDelegate(null,function($p1_0){ +Sys.Mvc.MvcHelpers.$3($3,$p4,$6);}));$3.invoke();}} +Sys.Mvc.MvcHelpers.$3=function($p0,$p1,$p2){$p2.set_response($p0.get_executor());if($p1.onComplete&&$p1.onComplete($p2)===false){return;}var $0=$p2.get_response().get_statusCode();if(($0>=200&&$0<300)||$0===304||$0===1223){if($0!==204&&$0!==304&&$0!==1223){var $1=$p2.get_response().getResponseHeader('Content-Type');if(($1)&&($1.indexOf('application/x-javascript')!==-1)){eval($p2.get_data());}else{Sys.Mvc.MvcHelpers.updateDomElement($p2.get_updateTarget(),$p2.get_insertionMode(),$p2.get_data());}}if($p1.onSuccess){$p1.onSuccess($p2);}}else{if($p1.onFailure){$p1.onFailure($p2);}}if($p2.get_loadingElement()){Sys.UI.DomElement.setVisible($p2.get_loadingElement(),false);}} +Sys.Mvc.MvcHelpers.updateDomElement=function(target,insertionMode,content){if(target){switch(insertionMode){case 0:target.innerHTML=content;break;case 1:if(content&&content.length>0){target.innerHTML=content+target.innerHTML.trimStart();}break;case 2:if(content&&content.length>0){target.innerHTML=target.innerHTML.trimEnd()+content;}break;}}} +Sys.Mvc.AsyncForm=function(){} +Sys.Mvc.AsyncForm.handleClick=function(form,evt){var $0=Sys.Mvc.MvcHelpers.$0(evt.target,evt.offsetX,evt.offsetY);form._additionalInput = $0;} +Sys.Mvc.AsyncForm.handleSubmit=function(form,evt,ajaxOptions){evt.preventDefault();var $0=form.validationCallbacks;if($0){for(var $2=0;$2<$0.length;$2++){var $3=$0[$2];if(!$3()){return;}}}var $1=Sys.Mvc.MvcHelpers.$1(form);Sys.Mvc.MvcHelpers.$2(form.action,form.method||'post',$1,form,ajaxOptions);} +Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext');Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink');Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers');Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm'); +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- diff --git a/Web/Scripts/MicrosoftMvcValidation.debug.js b/Web/Scripts/MicrosoftMvcValidation.debug.js new file mode 100644 index 0000000..346ba48 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcValidation.debug.js @@ -0,0 +1,883 @@ +//!---------------------------------------------------------- +//! Copyright (C) Microsoft Corporation. All rights reserved. +//!---------------------------------------------------------- +//! MicrosoftMvcValidation.js + + +Type.registerNamespace('Sys.Mvc'); + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.Validation + +Sys.Mvc.$create_Validation = function Sys_Mvc_Validation() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.JsonValidationField + +Sys.Mvc.$create_JsonValidationField = function Sys_Mvc_JsonValidationField() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.JsonValidationOptions + +Sys.Mvc.$create_JsonValidationOptions = function Sys_Mvc_JsonValidationOptions() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.JsonValidationRule + +Sys.Mvc.$create_JsonValidationRule = function Sys_Mvc_JsonValidationRule() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.ValidationContext + +Sys.Mvc.$create_ValidationContext = function Sys_Mvc_ValidationContext() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.NumberValidator + +Sys.Mvc.NumberValidator = function Sys_Mvc_NumberValidator() { +} +Sys.Mvc.NumberValidator.create = function Sys_Mvc_NumberValidator$create(rule) { + /// + /// + /// + return Function.createDelegate(new Sys.Mvc.NumberValidator(), new Sys.Mvc.NumberValidator().validate); +} +Sys.Mvc.NumberValidator.prototype = { + + validate: function Sys_Mvc_NumberValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + var n = Number.parseLocale(value); + return (!isNaN(n)); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.FormContext + +Sys.Mvc.FormContext = function Sys_Mvc_FormContext(formElement, validationSummaryElement) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + this._errors = []; + this.fields = new Array(0); + this._formElement = formElement; + this._validationSummaryElement = validationSummaryElement; + formElement[Sys.Mvc.FormContext._formValidationTag] = this; + if (validationSummaryElement) { + var ulElements = validationSummaryElement.getElementsByTagName('ul'); + if (ulElements.length > 0) { + this._validationSummaryULElement = ulElements[0]; + } + } + this._onClickHandler = Function.createDelegate(this, this._form_OnClick); + this._onSubmitHandler = Function.createDelegate(this, this._form_OnSubmit); +} +Sys.Mvc.FormContext._Application_Load = function Sys_Mvc_FormContext$_Application_Load() { + var allFormOptions = window.mvcClientValidationMetadata; + if (allFormOptions) { + while (allFormOptions.length > 0) { + var thisFormOptions = allFormOptions.pop(); + Sys.Mvc.FormContext._parseJsonOptions(thisFormOptions); + } + } +} +Sys.Mvc.FormContext._getFormElementsWithName = function Sys_Mvc_FormContext$_getFormElementsWithName(formElement, name) { + /// + /// + /// + /// + /// + var allElementsWithNameInForm = []; + var allElementsWithName = document.getElementsByName(name); + for (var i = 0; i < allElementsWithName.length; i++) { + var thisElement = allElementsWithName[i]; + if (Sys.Mvc.FormContext._isElementInHierarchy(formElement, thisElement)) { + Array.add(allElementsWithNameInForm, thisElement); + } + } + return allElementsWithNameInForm; +} +Sys.Mvc.FormContext.getValidationForForm = function Sys_Mvc_FormContext$getValidationForForm(formElement) { + /// + /// + /// + return formElement[Sys.Mvc.FormContext._formValidationTag]; +} +Sys.Mvc.FormContext._isElementInHierarchy = function Sys_Mvc_FormContext$_isElementInHierarchy(parent, child) { + /// + /// + /// + /// + /// + while (child) { + if (parent === child) { + return true; + } + child = child.parentNode; + } + return false; +} +Sys.Mvc.FormContext._parseJsonOptions = function Sys_Mvc_FormContext$_parseJsonOptions(options) { + /// + /// + /// + var formElement = $get(options.FormId); + var validationSummaryElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(options.ValidationSummaryId)) ? $get(options.ValidationSummaryId) : null; + var formContext = new Sys.Mvc.FormContext(formElement, validationSummaryElement); + formContext.enableDynamicValidation(); + formContext.replaceValidationSummary = options.ReplaceValidationSummary; + for (var i = 0; i < options.Fields.length; i++) { + var field = options.Fields[i]; + var fieldElements = Sys.Mvc.FormContext._getFormElementsWithName(formElement, field.FieldName); + var validationMessageElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(field.ValidationMessageId)) ? $get(field.ValidationMessageId) : null; + var fieldContext = new Sys.Mvc.FieldContext(formContext); + Array.addRange(fieldContext.elements, fieldElements); + fieldContext.validationMessageElement = validationMessageElement; + fieldContext.replaceValidationMessageContents = field.ReplaceValidationMessageContents; + for (var j = 0; j < field.ValidationRules.length; j++) { + var rule = field.ValidationRules[j]; + var validator = Sys.Mvc.ValidatorRegistry.getValidator(rule); + if (validator) { + var validation = Sys.Mvc.$create_Validation(); + validation.fieldErrorMessage = rule.ErrorMessage; + validation.validator = validator; + Array.add(fieldContext.validations, validation); + } + } + fieldContext.enableDynamicValidation(); + Array.add(formContext.fields, fieldContext); + } + var registeredValidatorCallbacks = formElement.validationCallbacks; + if (!registeredValidatorCallbacks) { + registeredValidatorCallbacks = []; + formElement.validationCallbacks = registeredValidatorCallbacks; + } + registeredValidatorCallbacks.push(Function.createDelegate(null, function() { + return Sys.Mvc._validationUtil.arrayIsNullOrEmpty(formContext.validate('submit')); + })); + return formContext; +} +Sys.Mvc.FormContext.prototype = { + _onClickHandler: null, + _onSubmitHandler: null, + _submitButtonClicked: null, + _validationSummaryElement: null, + _validationSummaryULElement: null, + _formElement: null, + replaceValidationSummary: false, + + addError: function Sys_Mvc_FormContext$addError(message) { + /// + /// + this.addErrors([ message ]); + }, + + addErrors: function Sys_Mvc_FormContext$addErrors(messages) { + /// + /// + if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) { + Array.addRange(this._errors, messages); + this._onErrorCountChanged(); + } + }, + + clearErrors: function Sys_Mvc_FormContext$clearErrors() { + Array.clear(this._errors); + this._onErrorCountChanged(); + }, + + _displayError: function Sys_Mvc_FormContext$_displayError() { + if (this._validationSummaryElement) { + if (this._validationSummaryULElement) { + Sys.Mvc._validationUtil.removeAllChildren(this._validationSummaryULElement); + for (var i = 0; i < this._errors.length; i++) { + var liElement = document.createElement('li'); + Sys.Mvc._validationUtil.setInnerText(liElement, this._errors[i]); + this._validationSummaryULElement.appendChild(liElement); + } + } + Sys.UI.DomElement.removeCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss); + Sys.UI.DomElement.addCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss); + } + }, + + _displaySuccess: function Sys_Mvc_FormContext$_displaySuccess() { + var validationSummaryElement = this._validationSummaryElement; + if (validationSummaryElement) { + var validationSummaryULElement = this._validationSummaryULElement; + if (validationSummaryULElement) { + validationSummaryULElement.innerHTML = ''; + } + Sys.UI.DomElement.removeCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss); + Sys.UI.DomElement.addCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss); + } + }, + + enableDynamicValidation: function Sys_Mvc_FormContext$enableDynamicValidation() { + Sys.UI.DomEvent.addHandler(this._formElement, 'click', this._onClickHandler); + Sys.UI.DomEvent.addHandler(this._formElement, 'submit', this._onSubmitHandler); + }, + + _findSubmitButton: function Sys_Mvc_FormContext$_findSubmitButton(element) { + /// + /// + /// + if (element.disabled) { + return null; + } + var tagName = element.tagName.toUpperCase(); + var inputElement = element; + if (tagName === 'INPUT') { + var type = inputElement.type; + if (type === 'submit' || type === 'image') { + return inputElement; + } + } + else if ((tagName === 'BUTTON') && (inputElement.type === 'submit')) { + return inputElement; + } + return null; + }, + + _form_OnClick: function Sys_Mvc_FormContext$_form_OnClick(e) { + /// + /// + this._submitButtonClicked = this._findSubmitButton(e.target); + }, + + _form_OnSubmit: function Sys_Mvc_FormContext$_form_OnSubmit(e) { + /// + /// + var form = e.target; + var submitButton = this._submitButtonClicked; + if (submitButton && submitButton.disableValidation) { + return; + } + var errorMessages = this.validate('submit'); + if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(errorMessages)) { + e.preventDefault(); + } + }, + + _onErrorCountChanged: function Sys_Mvc_FormContext$_onErrorCountChanged() { + if (!this._errors.length) { + this._displaySuccess(); + } + else { + this._displayError(); + } + }, + + validate: function Sys_Mvc_FormContext$validate(eventName) { + /// + /// + /// + var fields = this.fields; + var errors = []; + for (var i = 0; i < fields.length; i++) { + var field = fields[i]; + if (!field.elements[0].disabled) { + var thisErrors = field.validate(eventName); + if (thisErrors) { + Array.addRange(errors, thisErrors); + } + } + } + if (this.replaceValidationSummary) { + this.clearErrors(); + this.addErrors(errors); + } + return errors; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.FieldContext + +Sys.Mvc.FieldContext = function Sys_Mvc_FieldContext(formContext) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + this._errors = []; + this.elements = new Array(0); + this.validations = new Array(0); + this.formContext = formContext; + this._onBlurHandler = Function.createDelegate(this, this._element_OnBlur); + this._onChangeHandler = Function.createDelegate(this, this._element_OnChange); + this._onInputHandler = Function.createDelegate(this, this._element_OnInput); + this._onPropertyChangeHandler = Function.createDelegate(this, this._element_OnPropertyChange); +} +Sys.Mvc.FieldContext.prototype = { + _onBlurHandler: null, + _onChangeHandler: null, + _onInputHandler: null, + _onPropertyChangeHandler: null, + defaultErrorMessage: null, + formContext: null, + replaceValidationMessageContents: false, + validationMessageElement: null, + + addError: function Sys_Mvc_FieldContext$addError(message) { + /// + /// + this.addErrors([ message ]); + }, + + addErrors: function Sys_Mvc_FieldContext$addErrors(messages) { + /// + /// + if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) { + Array.addRange(this._errors, messages); + this._onErrorCountChanged(); + } + }, + + clearErrors: function Sys_Mvc_FieldContext$clearErrors() { + Array.clear(this._errors); + this._onErrorCountChanged(); + }, + + _displayError: function Sys_Mvc_FieldContext$_displayError() { + var validationMessageElement = this.validationMessageElement; + if (validationMessageElement) { + if (this.replaceValidationMessageContents) { + Sys.Mvc._validationUtil.setInnerText(validationMessageElement, this._errors[0]); + } + Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss); + Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss); + } + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss); + Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss); + } + }, + + _displaySuccess: function Sys_Mvc_FieldContext$_displaySuccess() { + var validationMessageElement = this.validationMessageElement; + if (validationMessageElement) { + if (this.replaceValidationMessageContents) { + Sys.Mvc._validationUtil.setInnerText(validationMessageElement, ''); + } + Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss); + Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss); + } + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss); + Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss); + } + }, + + _element_OnBlur: function Sys_Mvc_FieldContext$_element_OnBlur(e) { + /// + /// + if (e.target[Sys.Mvc.FieldContext._hasTextChangedTag] || e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) { + this.validate('blur'); + } + }, + + _element_OnChange: function Sys_Mvc_FieldContext$_element_OnChange(e) { + /// + /// + e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true; + }, + + _element_OnInput: function Sys_Mvc_FieldContext$_element_OnInput(e) { + /// + /// + e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true; + if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) { + this.validate('input'); + } + }, + + _element_OnPropertyChange: function Sys_Mvc_FieldContext$_element_OnPropertyChange(e) { + /// + /// + if (e.rawEvent.propertyName === 'value') { + e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true; + if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) { + this.validate('input'); + } + } + }, + + enableDynamicValidation: function Sys_Mvc_FieldContext$enableDynamicValidation() { + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + if (Sys.Mvc._validationUtil.elementSupportsEvent(element, 'onpropertychange')) { + var compatMode = document.documentMode; + if (compatMode && compatMode >= 8) { + Sys.UI.DomEvent.addHandler(element, 'propertychange', this._onPropertyChangeHandler); + } + } + else { + Sys.UI.DomEvent.addHandler(element, 'input', this._onInputHandler); + } + Sys.UI.DomEvent.addHandler(element, 'change', this._onChangeHandler); + Sys.UI.DomEvent.addHandler(element, 'blur', this._onBlurHandler); + } + }, + + _getErrorString: function Sys_Mvc_FieldContext$_getErrorString(validatorReturnValue, fieldErrorMessage) { + /// + /// + /// + /// + /// + var fallbackErrorMessage = fieldErrorMessage || this.defaultErrorMessage; + if (Boolean.isInstanceOfType(validatorReturnValue)) { + return (validatorReturnValue) ? null : fallbackErrorMessage; + } + if (String.isInstanceOfType(validatorReturnValue)) { + return ((validatorReturnValue).length) ? validatorReturnValue : fallbackErrorMessage; + } + return null; + }, + + _getStringValue: function Sys_Mvc_FieldContext$_getStringValue() { + /// + var elements = this.elements; + return (elements.length > 0) ? elements[0].value : null; + }, + + _markValidationFired: function Sys_Mvc_FieldContext$_markValidationFired() { + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + element[Sys.Mvc.FieldContext._hasValidationFiredTag] = true; + } + }, + + _onErrorCountChanged: function Sys_Mvc_FieldContext$_onErrorCountChanged() { + if (!this._errors.length) { + this._displaySuccess(); + } + else { + this._displayError(); + } + }, + + validate: function Sys_Mvc_FieldContext$validate(eventName) { + /// + /// + /// + var validations = this.validations; + var errors = []; + var value = this._getStringValue(); + for (var i = 0; i < validations.length; i++) { + var validation = validations[i]; + var context = Sys.Mvc.$create_ValidationContext(); + context.eventName = eventName; + context.fieldContext = this; + context.validation = validation; + var retVal = validation.validator(value, context); + var errorMessage = this._getErrorString(retVal, validation.fieldErrorMessage); + if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(errorMessage)) { + Array.add(errors, errorMessage); + } + } + this._markValidationFired(); + this.clearErrors(); + this.addErrors(errors); + return errors; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.RangeValidator + +Sys.Mvc.RangeValidator = function Sys_Mvc_RangeValidator(minimum, maximum) { + /// + /// + /// + /// + /// + /// + /// + /// + this._minimum = minimum; + this._maximum = maximum; +} +Sys.Mvc.RangeValidator.create = function Sys_Mvc_RangeValidator$create(rule) { + /// + /// + /// + var min = rule.ValidationParameters['min']; + var max = rule.ValidationParameters['max']; + return Function.createDelegate(new Sys.Mvc.RangeValidator(min, max), new Sys.Mvc.RangeValidator(min, max).validate); +} +Sys.Mvc.RangeValidator.prototype = { + _minimum: null, + _maximum: null, + + validate: function Sys_Mvc_RangeValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + var n = Number.parseLocale(value); + return (!isNaN(n) && this._minimum <= n && n <= this._maximum); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.RegularExpressionValidator + +Sys.Mvc.RegularExpressionValidator = function Sys_Mvc_RegularExpressionValidator(pattern) { + /// + /// + /// + /// + this._pattern = pattern; +} +Sys.Mvc.RegularExpressionValidator.create = function Sys_Mvc_RegularExpressionValidator$create(rule) { + /// + /// + /// + var pattern = rule.ValidationParameters['pattern']; + return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator(pattern), new Sys.Mvc.RegularExpressionValidator(pattern).validate); +} +Sys.Mvc.RegularExpressionValidator.prototype = { + _pattern: null, + + validate: function Sys_Mvc_RegularExpressionValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + var regExp = new RegExp(this._pattern); + var matches = regExp.exec(value); + return (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(matches) && matches[0].length === value.length); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.RequiredValidator + +Sys.Mvc.RequiredValidator = function Sys_Mvc_RequiredValidator() { +} +Sys.Mvc.RequiredValidator.create = function Sys_Mvc_RequiredValidator$create(rule) { + /// + /// + /// + return Function.createDelegate(new Sys.Mvc.RequiredValidator(), new Sys.Mvc.RequiredValidator().validate); +} +Sys.Mvc.RequiredValidator._isRadioInputElement = function Sys_Mvc_RequiredValidator$_isRadioInputElement(element) { + /// + /// + /// + if (element.tagName.toUpperCase() === 'INPUT') { + var inputType = (element.type).toUpperCase(); + if (inputType === 'RADIO') { + return true; + } + } + return false; +} +Sys.Mvc.RequiredValidator._isSelectInputElement = function Sys_Mvc_RequiredValidator$_isSelectInputElement(element) { + /// + /// + /// + if (element.tagName.toUpperCase() === 'SELECT') { + return true; + } + return false; +} +Sys.Mvc.RequiredValidator._isTextualInputElement = function Sys_Mvc_RequiredValidator$_isTextualInputElement(element) { + /// + /// + /// + if (element.tagName.toUpperCase() === 'INPUT') { + var inputType = (element.type).toUpperCase(); + switch (inputType) { + case 'TEXT': + case 'PASSWORD': + case 'FILE': + return true; + } + } + if (element.tagName.toUpperCase() === 'TEXTAREA') { + return true; + } + return false; +} +Sys.Mvc.RequiredValidator._validateRadioInput = function Sys_Mvc_RequiredValidator$_validateRadioInput(elements) { + /// + /// + /// + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + if (element.checked) { + return true; + } + } + return false; +} +Sys.Mvc.RequiredValidator._validateSelectInput = function Sys_Mvc_RequiredValidator$_validateSelectInput(optionElements) { + /// + /// + /// + for (var i = 0; i < optionElements.length; i++) { + var element = optionElements[i]; + if (element.selected) { + if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)) { + return true; + } + } + } + return false; +} +Sys.Mvc.RequiredValidator._validateTextualInput = function Sys_Mvc_RequiredValidator$_validateTextualInput(element) { + /// + /// + /// + return (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)); +} +Sys.Mvc.RequiredValidator.prototype = { + + validate: function Sys_Mvc_RequiredValidator$validate(value, context) { + /// + /// + /// + /// + /// + var elements = context.fieldContext.elements; + if (!elements.length) { + return true; + } + var sampleElement = elements[0]; + if (Sys.Mvc.RequiredValidator._isTextualInputElement(sampleElement)) { + return Sys.Mvc.RequiredValidator._validateTextualInput(sampleElement); + } + if (Sys.Mvc.RequiredValidator._isRadioInputElement(sampleElement)) { + return Sys.Mvc.RequiredValidator._validateRadioInput(elements); + } + if (Sys.Mvc.RequiredValidator._isSelectInputElement(sampleElement)) { + return Sys.Mvc.RequiredValidator._validateSelectInput((sampleElement).options); + } + return true; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.StringLengthValidator + +Sys.Mvc.StringLengthValidator = function Sys_Mvc_StringLengthValidator(minLength, maxLength) { + /// + /// + /// + /// + /// + /// + /// + /// + this._minLength = minLength; + this._maxLength = maxLength; +} +Sys.Mvc.StringLengthValidator.create = function Sys_Mvc_StringLengthValidator$create(rule) { + /// + /// + /// + var minLength = (rule.ValidationParameters['min'] || 0); + var maxLength = (rule.ValidationParameters['max'] || Number.MAX_VALUE); + return Function.createDelegate(new Sys.Mvc.StringLengthValidator(minLength, maxLength), new Sys.Mvc.StringLengthValidator(minLength, maxLength).validate); +} +Sys.Mvc.StringLengthValidator.prototype = { + _maxLength: 0, + _minLength: 0, + + validate: function Sys_Mvc_StringLengthValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + return (this._minLength <= value.length && value.length <= this._maxLength); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc._validationUtil + +Sys.Mvc._validationUtil = function Sys_Mvc__validationUtil() { +} +Sys.Mvc._validationUtil.arrayIsNullOrEmpty = function Sys_Mvc__validationUtil$arrayIsNullOrEmpty(array) { + /// + /// + /// + return (!array || !array.length); +} +Sys.Mvc._validationUtil.stringIsNullOrEmpty = function Sys_Mvc__validationUtil$stringIsNullOrEmpty(value) { + /// + /// + /// + return (!value || !value.length); +} +Sys.Mvc._validationUtil.elementSupportsEvent = function Sys_Mvc__validationUtil$elementSupportsEvent(element, eventAttributeName) { + /// + /// + /// + /// + /// + return (eventAttributeName in element); +} +Sys.Mvc._validationUtil.removeAllChildren = function Sys_Mvc__validationUtil$removeAllChildren(element) { + /// + /// + while (element.firstChild) { + element.removeChild(element.firstChild); + } +} +Sys.Mvc._validationUtil.setInnerText = function Sys_Mvc__validationUtil$setInnerText(element, innerText) { + /// + /// + /// + /// + var textNode = document.createTextNode(innerText); + Sys.Mvc._validationUtil.removeAllChildren(element); + element.appendChild(textNode); +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.ValidatorRegistry + +Sys.Mvc.ValidatorRegistry = function Sys_Mvc_ValidatorRegistry() { + /// + /// +} +Sys.Mvc.ValidatorRegistry.getValidator = function Sys_Mvc_ValidatorRegistry$getValidator(rule) { + /// + /// + /// + var creator = Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType]; + return (creator) ? creator(rule) : null; +} +Sys.Mvc.ValidatorRegistry._getDefaultValidators = function Sys_Mvc_ValidatorRegistry$_getDefaultValidators() { + /// + return { required: Function.createDelegate(null, Sys.Mvc.RequiredValidator.create), length: Function.createDelegate(null, Sys.Mvc.StringLengthValidator.create), regex: Function.createDelegate(null, Sys.Mvc.RegularExpressionValidator.create), range: Function.createDelegate(null, Sys.Mvc.RangeValidator.create), number: Function.createDelegate(null, Sys.Mvc.NumberValidator.create) }; +} + + +Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator'); +Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext'); +Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext'); +Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator'); +Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator'); +Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator'); +Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator'); +Sys.Mvc._validationUtil.registerClass('Sys.Mvc._validationUtil'); +Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry'); +Sys.Mvc.FormContext._validationSummaryErrorCss = 'validation-summary-errors'; +Sys.Mvc.FormContext._validationSummaryValidCss = 'validation-summary-valid'; +Sys.Mvc.FormContext._formValidationTag = '__MVC_FormValidation'; +Sys.Mvc.FieldContext._hasTextChangedTag = '__MVC_HasTextChanged'; +Sys.Mvc.FieldContext._hasValidationFiredTag = '__MVC_HasValidationFired'; +Sys.Mvc.FieldContext._inputElementErrorCss = 'input-validation-error'; +Sys.Mvc.FieldContext._inputElementValidCss = 'input-validation-valid'; +Sys.Mvc.FieldContext._validationMessageErrorCss = 'field-validation-error'; +Sys.Mvc.FieldContext._validationMessageValidCss = 'field-validation-valid'; +Sys.Mvc.ValidatorRegistry.validators = Sys.Mvc.ValidatorRegistry._getDefaultValidators(); + +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- + +// register validation +Sys.Application.add_load(function() { + Sys.Application.remove_load(arguments.callee); + Sys.Mvc.FormContext._Application_Load(); +}); diff --git a/Web/Scripts/MicrosoftMvcValidation.js b/Web/Scripts/MicrosoftMvcValidation.js new file mode 100644 index 0000000..9483492 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcValidation.js @@ -0,0 +1,55 @@ +//---------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//---------------------------------------------------------- +// MicrosoftMvcValidation.js + +Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_Validation=function(){return {};} +Sys.Mvc.$create_JsonValidationField=function(){return {};} +Sys.Mvc.$create_JsonValidationOptions=function(){return {};} +Sys.Mvc.$create_JsonValidationRule=function(){return {};} +Sys.Mvc.$create_ValidationContext=function(){return {};} +Sys.Mvc.NumberValidator=function(){} +Sys.Mvc.NumberValidator.create=function(rule){return Function.createDelegate(new Sys.Mvc.NumberValidator(),new Sys.Mvc.NumberValidator().validate);} +Sys.Mvc.NumberValidator.prototype={validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=Number.parseLocale(value);return (!isNaN($0));}} +Sys.Mvc.FormContext=function(formElement,validationSummaryElement){this.$5=[];this.fields=new Array(0);this.$9=formElement;this.$7=validationSummaryElement;formElement['__MVC_FormValidation'] = this;if(validationSummaryElement){var $0=validationSummaryElement.getElementsByTagName('ul');if($0.length>0){this.$8=$0[0];}}this.$3=Function.createDelegate(this,this.$D);this.$4=Function.createDelegate(this,this.$E);} +Sys.Mvc.FormContext._Application_Load=function(){var $0=window.mvcClientValidationMetadata;if($0){while($0.length>0){var $1=$0.pop();Sys.Mvc.FormContext.$12($1);}}} +Sys.Mvc.FormContext.$F=function($p0,$p1){var $0=[];var $1=document.getElementsByName($p1);for(var $2=0;$2<$1.length;$2++){var $3=$1[$2];if(Sys.Mvc.FormContext.$10($p0,$3)){Array.add($0,$3);}}return $0;} +Sys.Mvc.FormContext.getValidationForForm=function(formElement){return formElement['__MVC_FormValidation'];} +Sys.Mvc.FormContext.$10=function($p0,$p1){while($p1){if($p0===$p1){return true;}$p1=$p1.parentNode;}return false;} +Sys.Mvc.FormContext.$12=function($p0){var $0=$get($p0.FormId);var $1=(!Sys.Mvc._ValidationUtil.$1($p0.ValidationSummaryId))?$get($p0.ValidationSummaryId):null;var $2=new Sys.Mvc.FormContext($0,$1);$2.enableDynamicValidation();$2.replaceValidationSummary=$p0.ReplaceValidationSummary;for(var $4=0;$4<$p0.Fields.length;$4++){var $5=$p0.Fields[$4];var $6=Sys.Mvc.FormContext.$F($0,$5.FieldName);var $7=(!Sys.Mvc._ValidationUtil.$1($5.ValidationMessageId))?$get($5.ValidationMessageId):null;var $8=new Sys.Mvc.FieldContext($2);Array.addRange($8.elements,$6);$8.validationMessageElement=$7;$8.replaceValidationMessageContents=$5.ReplaceValidationMessageContents;for(var $9=0;$9<$5.ValidationRules.length;$9++){var $A=$5.ValidationRules[$9];var $B=Sys.Mvc.ValidatorRegistry.getValidator($A);if($B){var $C=Sys.Mvc.$create_Validation();$C.fieldErrorMessage=$A.ErrorMessage;$C.validator=$B;Array.add($8.validations,$C);}}$8.enableDynamicValidation();Array.add($2.fields,$8);}var $3=$0.validationCallbacks;if(!$3){$3=[];$0.validationCallbacks = $3;}$3.push(Function.createDelegate(null,function(){ +return Sys.Mvc._ValidationUtil.$0($2.validate('submit'));}));return $2;} +Sys.Mvc.FormContext.prototype={$3:null,$4:null,$6:null,$7:null,$8:null,$9:null,replaceValidationSummary:false,addError:function(message){this.addErrors([message]);},addErrors:function(messages){if(!Sys.Mvc._ValidationUtil.$0(messages)){Array.addRange(this.$5,messages);this.$11();}},clearErrors:function(){Array.clear(this.$5);this.$11();},$A:function(){if(this.$7){if(this.$8){Sys.Mvc._ValidationUtil.$3(this.$8);for(var $0=0;$0=8){Sys.UI.DomEvent.addHandler($2,'propertychange',this.$9);}}else{Sys.UI.DomEvent.addHandler($2,'input',this.$8);}Sys.UI.DomEvent.addHandler($2,'change',this.$7);Sys.UI.DomEvent.addHandler($2,'blur',this.$6);}},$11:function($p0,$p1){var $0=$p1||this.defaultErrorMessage;if(Boolean.isInstanceOfType($p0)){return ($p0)?null:$0;}if(String.isInstanceOfType($p0)){return (($p0).length)?$p0:$0;}return null;},$12:function(){var $0=this.elements;return ($0.length>0)?$0[0].value:null;},$13:function(){var $0=this.elements;for(var $1=0;$1<$0.length;$1++){var $2=$0[$1];$2['__MVC_HasValidationFired'] = true;}},$14:function(){if(!this.$A.length){this.$C();}else{this.$B();}},validate:function(eventName){var $0=this.validations;var $1=[];var $2=this.$12();for(var $3=0;$3<$0.length;$3++){var $4=$0[$3];var $5=Sys.Mvc.$create_ValidationContext();$5.eventName=eventName;$5.fieldContext=this;$5.validation=$4;var $6=$4.validator($2,$5);var $7=this.$11($6,$4.fieldErrorMessage);if(!Sys.Mvc._ValidationUtil.$1($7)){Array.add($1,$7);}}this.$13();this.clearErrors();this.addErrors($1);return $1;}} +Sys.Mvc.RangeValidator=function(minimum,maximum){this.$0=minimum;this.$1=maximum;} +Sys.Mvc.RangeValidator.create=function(rule){var $0=rule.ValidationParameters['min'];var $1=rule.ValidationParameters['max'];return Function.createDelegate(new Sys.Mvc.RangeValidator($0,$1),new Sys.Mvc.RangeValidator($0,$1).validate);} +Sys.Mvc.RangeValidator.prototype={$0:null,$1:null,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=Number.parseLocale(value);return (!isNaN($0)&&this.$0<=$0&&$0<=this.$1);}} +Sys.Mvc.RegularExpressionValidator=function(pattern){this.$0=pattern;} +Sys.Mvc.RegularExpressionValidator.create=function(rule){var $0=rule.ValidationParameters['pattern'];return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator($0),new Sys.Mvc.RegularExpressionValidator($0).validate);} +Sys.Mvc.RegularExpressionValidator.prototype={$0:null,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=new RegExp(this.$0);var $1=$0.exec(value);return (!Sys.Mvc._ValidationUtil.$0($1)&&$1[0].length===value.length);}} +Sys.Mvc.RequiredValidator=function(){} +Sys.Mvc.RequiredValidator.create=function(rule){return Function.createDelegate(new Sys.Mvc.RequiredValidator(),new Sys.Mvc.RequiredValidator().validate);} +Sys.Mvc.RequiredValidator.$0=function($p0){if($p0.tagName.toUpperCase()==='INPUT'){var $0=($p0.type).toUpperCase();if($0==='RADIO'){return true;}}return false;} +Sys.Mvc.RequiredValidator.$1=function($p0){if($p0.tagName.toUpperCase()==='SELECT'){return true;}return false;} +Sys.Mvc.RequiredValidator.$2=function($p0){if($p0.tagName.toUpperCase()==='INPUT'){var $0=($p0.type).toUpperCase();switch($0){case 'TEXT':case 'PASSWORD':case 'FILE':return true;}}if($p0.tagName.toUpperCase()==='TEXTAREA'){return true;}return false;} +Sys.Mvc.RequiredValidator.$3=function($p0){for(var $0=0;$0<$p0.length;$0++){var $1=$p0[$0];if($1.checked){return true;}}return false;} +Sys.Mvc.RequiredValidator.$4=function($p0){for(var $0=0;$0<$p0.length;$0++){var $1=$p0[$0];if($1.selected){if(!Sys.Mvc._ValidationUtil.$1($1.value)){return true;}}}return false;} +Sys.Mvc.RequiredValidator.$5=function($p0){return (!Sys.Mvc._ValidationUtil.$1($p0.value));} +Sys.Mvc.RequiredValidator.prototype={validate:function(value,context){var $0=context.fieldContext.elements;if(!$0.length){return true;}var $1=$0[0];if(Sys.Mvc.RequiredValidator.$2($1)){return Sys.Mvc.RequiredValidator.$5($1);}if(Sys.Mvc.RequiredValidator.$0($1)){return Sys.Mvc.RequiredValidator.$3($0);}if(Sys.Mvc.RequiredValidator.$1($1)){return Sys.Mvc.RequiredValidator.$4(($1).options);}return true;}} +Sys.Mvc.StringLengthValidator=function(minLength,maxLength){this.$1=minLength;this.$0=maxLength;} +Sys.Mvc.StringLengthValidator.create=function(rule){var $0=(rule.ValidationParameters['min']||0);var $1=(rule.ValidationParameters['max']||Number.MAX_VALUE);return Function.createDelegate(new Sys.Mvc.StringLengthValidator($0,$1),new Sys.Mvc.StringLengthValidator($0,$1).validate);} +Sys.Mvc.StringLengthValidator.prototype={$0:0,$1:0,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}return (this.$1<=value.length&&value.length<=this.$0);}} +Sys.Mvc._ValidationUtil=function(){} +Sys.Mvc._ValidationUtil.$0=function($p0){return (!$p0||!$p0.length);} +Sys.Mvc._ValidationUtil.$1=function($p0){return (!$p0||!$p0.length);} +Sys.Mvc._ValidationUtil.$2=function($p0,$p1){return ($p1 in $p0);} +Sys.Mvc._ValidationUtil.$3=function($p0){while($p0.firstChild){$p0.removeChild($p0.firstChild);}} +Sys.Mvc._ValidationUtil.$4=function($p0,$p1){var $0=document.createTextNode($p1);Sys.Mvc._ValidationUtil.$3($p0);$p0.appendChild($0);} +Sys.Mvc.ValidatorRegistry=function(){} +Sys.Mvc.ValidatorRegistry.getValidator=function(rule){var $0=Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType];return ($0)?$0(rule):null;} +Sys.Mvc.ValidatorRegistry.$0=function(){return {required:Function.createDelegate(null,Sys.Mvc.RequiredValidator.create),length:Function.createDelegate(null,Sys.Mvc.StringLengthValidator.create),regex:Function.createDelegate(null,Sys.Mvc.RegularExpressionValidator.create),range:Function.createDelegate(null,Sys.Mvc.RangeValidator.create),number:Function.createDelegate(null,Sys.Mvc.NumberValidator.create)};} +Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator');Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext');Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext');Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator');Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator');Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator');Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator');Sys.Mvc._ValidationUtil.registerClass('Sys.Mvc._ValidationUtil');Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry');Sys.Mvc.ValidatorRegistry.validators=Sys.Mvc.ValidatorRegistry.$0(); +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- +Sys.Application.add_load(function(){Sys.Application.remove_load(arguments.callee);Sys.Mvc.FormContext._Application_Load();}); \ No newline at end of file diff --git a/Web/Scripts/Shared/Site.js b/Web/Scripts/Shared/Site.js new file mode 100644 index 0000000..18f8c06 --- /dev/null +++ b/Web/Scripts/Shared/Site.js @@ -0,0 +1,152 @@ +$(function () { + $("tbody > tr:odd").addClass("odd"); + $("input:submit, .ui-button").button(); + $("input#Date").datepicker({ maxDate: '+0d' }); + $(".display-field-container") + .filter(".source,.userHostAddress,.userAgent") + .children(".display-label") + .css('text-decoration', 'underline') + .click(function () { + $(this).parent().children('.display-field').toggle(); + }) + .end() + .children('.display-field').hide(); + $("input#CityName").autocomplete({ + source: "/City/Autocomplete", + minLength: 2 + }); + $("input#EmployeeName, input#Assigned").autocomplete({ + source: "/Employee/Autocomplete", + minLength: 2 + }); + $("form select#Year").change(function () { + $.getJSON('/Log/GetValidLogMonths', { year: $(this).val() }, function (months) { + var options = ''; + for (var i = 0; i < months.length; i++) { + options += ''; + } + $("form select#Month").html(options); + }); + }); + $("input#ModelYear,input#Price,input#VehicleId,input#EndOdometer,input#GasPurchased").numeric(); + $(".report-miles").each(function () { + var content = $(this).next('.report-calculation'); + $(this).qtip({ + content: content, + hide: { fixed: true, delay: 1000 }, + style: { + name: 'light', + width: 400 + } + }); + }); + + $(".miles-unknown").addClass('ui-state-error').append('') + .each(function () { + $(this).qtip({ + content: "No previous log for this vehicle", + style: { + name: 'red' + } + }); + }); + + $("a.qtip-modal").each(function () { bindQtipModal($(this)); }); + + $("input#EmployeeName").after(''); + + function employeeHistoryKeydownHandler(data) { + employeeHistoryIconUpdate($(data.target), $("#icon-employee-history")); + } + + function employeeHistoryIconUpdate($input, $icon) { + if (!$input.hasClass("input-validation-error") // not invalid + && $input.attr("value").length > 0) // has text + $icon.removeClass("transparent"); + else + $icon.addClass("transparent"); + } + + $("input#EmployeeName").change(employeeHistoryKeydownHandler).keydown(employeeHistoryKeydownHandler); + + employeeHistoryIconUpdate($("input#EmployeeName"), $("#icon-employee-history")); + + $("#icon-employee-history").qtip({ + content: '

    Recent Logs...

    ', + api: { + beforeShow: function () { + var qt = this; + $.ajax( + { + url: "CreateLog/RecentLogs", + data: { employeeName: $("input#EmployeeName").val() }, + success: function (data) { + qt.updateContent(data, true); + } + }); + } + }, + style: { + width: 320, + border: { + color: '#81B3B3' + } + }, + hide: { + fixed: true, + delay: 500 + } + }); + + if ($('input#VehicleId').length > 0) { + // var settings = $('form').validate().settings; + + // settings.onkeyup = false; + // settings.onfocusout = function (element) { $(element).valid(); }; + + // var oldSuccessFunction = settings.success; + + // settings.success = function (label) { + // alert("success"); + + // oldSuccessFunction(label); + // }; + } +}); + +function bindQtipModal(element) { + var corner = { + target: 'topLeft', + tooltip: 'bottomCenter' + }; + var tip = 'bottomLeft'; + if (element.hasClass("below")) { + corner = { + target: 'bottomMiddle', + tooltip: 'topRight' + }; + tip = 'topRight'; + } + + element.click(function () { return false; }); + + element.append(''); + + element.qtip({ + content: { + url: element.attr('href') + }, + hide: { + fixed: true, + delay: 500 + }, + position: { + corner: corner + }, + style: { + name: 'light', + tip: tip, + width: 300 + } + }); +} \ No newline at end of file diff --git a/Web/Scripts/jquery-1.7.2-vsdoc.js b/Web/Scripts/jquery-1.7.2-vsdoc.js new file mode 100644 index 0000000..bb466aa --- /dev/null +++ b/Web/Scripts/jquery-1.7.2-vsdoc.js @@ -0,0 +1,7223 @@ +/* +* This file has been generated to support Visual Studio IntelliSense. +* You should not use this file at runtime inside the browser--it is only +* intended to be used only for design-time IntelliSense. Please use the +* standard jQuery library for all production use. +* +* Comment version: 1.7.2 +*/ + +/*! +* jQuery JavaScript Library v1.7.2 +* http://jquery.com/ +* +* Distributed in whole under the terms of the MIT +* +* Copyright 2010, John Resig +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +* Includes Sizzle.js +* http://sizzlejs.com/ +* Copyright 2010, The Dojo Foundation +* Released under the MIT and BSD Licenses. +*/ + +(function (window, undefined) { + var jQuery = function (selector, context) { + /// + /// 1: Accepts a string containing a CSS selector which is then used to match a set of elements. + /// 1.1 - $(selector, context) + /// 1.2 - $(element) + /// 1.3 - $(object) + /// 1.4 - $(elementArray) + /// 1.5 - $(jQuery object) + /// 1.6 - $() + /// 2: Creates DOM elements on the fly from the provided string of raw HTML. + /// 2.1 - $(html, ownerDocument) + /// 2.2 - $(html, props) + /// 3: Binds a function to be executed when the DOM has finished loading. + /// 3.1 - $(callback) + /// + /// + /// A string containing a selector expression + /// + /// + /// A DOM Element, Document, or jQuery to use as context + /// + /// + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }; + jQuery.Callbacks = function (flags) { + /// + /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. + /// + /// + /// An optional list of space-separated flags that change how the callback list behaves. + /// + + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? (flagsCache[flags] || createFlags(flags)) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function (args) { + var i, + length, + elem, + type, + actual; + for (i = 0, length = args.length; i < length; i++) { + elem = args[i]; + type = jQuery.type(elem); + if (type === "array") { + // Inspect recursively + add(elem); + } else if (type === "function") { + // Add if not in unique mode and callback is not in + if (!flags.unique || !self.has(elem)) { + list.push(elem); + } + } + } + }, + // Fire callbacks + fire = function (context, args) { + args = args || []; + memory = !flags.memory || [context, args]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for (; list && firingIndex < firingLength; firingIndex++) { + if (list[firingIndex].apply(context, args) === false && flags.stopOnFalse) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if (list) { + if (!flags.once) { + if (stack && stack.length) { + memory = stack.shift(); + self.fireWith(memory[0], memory[1]); + } + } else if (memory === true) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function () { + if (list) { + var length = list.length; + add(arguments); + // Do we need to add the callbacks to the + // current firing batch? + if (firing) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if (memory && memory !== true) { + firingStart = length; + fire(memory[0], memory[1]); + } + } + return this; + }, + // Remove a callback from the list + remove: function () { + if (list) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for (; argIndex < argLength ; argIndex++) { + for (var i = 0; i < list.length; i++) { + if (args[argIndex] === list[i]) { + // Handle firingIndex and firingLength + if (firing) { + if (i <= firingLength) { + firingLength--; + if (i <= firingIndex) { + firingIndex--; + } + } + } + // Remove the element + list.splice(i--, 1); + // If we have some unicity property then + // we only need to do this once + if (flags.unique) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function (fn) { + if (list) { + var i = 0, + length = list.length; + for (; i < length; i++) { + if (fn === list[i]) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function () { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function () { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function () { + return !list; + }, + // Lock the list in its current state + lock: function () { + stack = undefined; + if (!memory || memory === true) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function () { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function (context, args) { + if (stack) { + if (firing) { + if (!flags.once) { + stack.push([context, args]); + } + } else if (!(flags.once && memory)) { + fire(context, args); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function () { + self.fireWith(this, arguments); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function () { + return !!fired; + } + }; + + return self; + }; + jQuery.Deferred = function (func) { + + var doneList = jQuery.Callbacks("once memory"), + failList = jQuery.Callbacks("once memory"), + progressList = jQuery.Callbacks("memory"), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function () { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function (doneCallbacks, failCallbacks, progressCallbacks) { + deferred.done(doneCallbacks).fail(failCallbacks).progress(progressCallbacks); + return this; + }, + always: function () { + deferred.done.apply(deferred, arguments).fail.apply(deferred, arguments); + return this; + }, + pipe: function (fnDone, fnFail, fnProgress) { + return jQuery.Deferred(function (newDefer) { + jQuery.each({ + done: [fnDone, "resolve"], + fail: [fnFail, "reject"], + progress: [fnProgress, "notify"] + }, function (handler, data) { + var fn = data[0], + action = data[1], + returned; + if (jQuery.isFunction(fn)) { + deferred[handler](function () { + returned = fn.apply(this, arguments); + if (returned && jQuery.isFunction(returned.promise)) { + returned.promise().then(newDefer.resolve, newDefer.reject, newDefer.notify); + } else { + newDefer[action + "With"](this === deferred ? newDefer : this, [returned]); + } + }); + } else { + deferred[handler](newDefer[action]); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function (obj) { + if (obj == null) { + obj = promise; + } else { + for (var key in promise) { + obj[key] = promise[key]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for (key in lists) { + deferred[key] = lists[key].fire; + deferred[key + "With"] = lists[key].fireWith; + } + + // Handle state + deferred.done(function () { + state = "resolved"; + }, failList.disable, progressList.lock).fail(function () { + state = "rejected"; + }, doneList.disable, progressList.lock); + + // Call given func if any + if (func) { + func.call(deferred, deferred); + } + + // All done! + return deferred; + }; + jQuery.Event = function (src, props) { + + // Allow instantiation without the 'new' keyword + if (!(this instanceof jQuery.Event)) { + return new jQuery.Event(src, props); + } + + // Event object + if (src && src.type) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if (props) { + jQuery.extend(this, props); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[jQuery.expando] = true; + }; + jQuery._data = function (elem, name, data) { + + return jQuery.data(elem, name, data, true); + }; + jQuery._mark = function (elem, type) { + + if (elem) { + type = (type || "fx") + "mark"; + jQuery._data(elem, type, (jQuery._data(elem, type) || 0) + 1); + } + }; + jQuery._unmark = function (force, elem, type) { + + if (force !== true) { + type = elem; + elem = force; + force = false; + } + if (elem) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ((jQuery._data(elem, key) || 1) - 1); + if (count) { + jQuery._data(elem, key, count); + } else { + jQuery.removeData(elem, key, true); + handleQueueMarkDefer(elem, type, "mark"); + } + } + }; + jQuery.acceptData = function (elem) { + + if (elem.nodeName) { + var match = jQuery.noData[elem.nodeName.toLowerCase()]; + + if (match) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + }; + jQuery.access = function (elems, fn, key, value, chainable, emptyGet, pass) { + + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if (key && typeof key === "object") { + for (i in key) { + jQuery.access(elems, fn, i, key[i], 1, emptyGet, value); + } + chainable = 1; + + // Sets one value + } else if (value !== undefined) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction(value); + + if (bulk) { + // Bulk operations only iterate when executing function values + if (exec) { + exec = fn; + fn = function (elem, key, value) { + return exec.call(jQuery(elem), value); + }; + + // Otherwise they run against the entire set + } else { + fn.call(elems, value); + fn = null; + } + } + + if (fn) { + for (; i < length; i++) { + fn(elems[i], key, exec ? value.call(elems[i], i, fn(elems[i], key)) : value, pass); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call(elems) : + length ? fn(elems[0], key) : emptyGet; + }; + jQuery.active = 0; + jQuery.ajax = function (url, options) { + /// + /// Perform an asynchronous HTTP (Ajax) request. + /// 1 - jQuery.ajax(url, settings) + /// 2 - jQuery.ajax(settings) + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. + /// + + + // If url is an object, simulate pre-1.5 signature + if (typeof url === "object") { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // Create the final options object + s = jQuery.ajaxSetup({}, options), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + (callbackContext.nodeType || callbackContext instanceof jQuery) ? + jQuery(callbackContext) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // ifModified key + ifModifiedKey, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // The jqXHR state + state = 0, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function (name, value) { + if (!state) { + var lname = name.toLowerCase(); + name = requestHeadersNames[lname] = requestHeadersNames[lname] || name; + requestHeaders[name] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function () { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function (key) { + var match; + if (state === 2) { + if (!responseHeaders) { + responseHeaders = {}; + while ((match = rheaders.exec(responseHeadersString))) { + responseHeaders[match[1].toLowerCase()] = match[2]; + } + } + match = responseHeaders[key.toLowerCase()]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function (type) { + if (!state) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function (statusText) { + statusText = statusText || "abort"; + if (transport) { + transport.abort(statusText); + } + done(0, statusText); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done(status, nativeStatusText, responses, headers) { + + // Called once + if (state === 2) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if (timeoutTimer) { + clearTimeout(timeoutTimer); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + var isSuccess, + success, + error, + statusText = nativeStatusText, + response = responses ? ajaxHandleResponses(s, jqXHR, responses) : undefined, + lastModified, + etag; + + // If successful, handle type chaining + if (status >= 200 && status < 300 || status === 304) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if (s.ifModified) { + + if ((lastModified = jqXHR.getResponseHeader("Last-Modified"))) { + jQuery.lastModified[ifModifiedKey] = lastModified; + } + if ((etag = jqXHR.getResponseHeader("Etag"))) { + jQuery.etag[ifModifiedKey] = etag; + } + } + + // If not modified + if (status === 304) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + try { + success = ajaxConvert(s, response); + statusText = "success"; + isSuccess = true; + } catch (e) { + // We have a parsererror + statusText = "parsererror"; + error = e; + } + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if (!statusText || status) { + statusText = "error"; + if (status < 0) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = "" + (nativeStatusText || statusText); + + // Success/Error + if (isSuccess) { + deferred.resolveWith(callbackContext, [success, statusText, jqXHR]); + } else { + deferred.rejectWith(callbackContext, [jqXHR, statusText, error]); + } + + // Status-dependent callbacks + jqXHR.statusCode(statusCode); + statusCode = undefined; + + if (fireGlobals) { + globalEventContext.trigger("ajax" + (isSuccess ? "Success" : "Error"), + [jqXHR, s, isSuccess ? success : error]); + } + + // Complete + completeDeferred.fireWith(callbackContext, [jqXHR, statusText]); + + if (fireGlobals) { + globalEventContext.trigger("ajaxComplete", [jqXHR, s]); + // Handle the global AJAX counter + if (!(--jQuery.active)) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + // Attach deferreds + deferred.promise(jqXHR); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function (map) { + if (map) { + var tmp; + if (state < 2) { + for (tmp in map) { + statusCode[tmp] = [statusCode[tmp], map[tmp]]; + } + } else { + tmp = map[jqXHR.status]; + jqXHR.then(tmp, tmp); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ((url || s.url) + "").replace(rhash, "").replace(rprotocol, ajaxLocParts[1] + "//"); + + // Extract dataTypes list + s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().split(rspacesAjax); + + // Determine if a cross-domain request is in order + if (s.crossDomain == null) { + parts = rurl.exec(s.url.toLowerCase()); + s.crossDomain = !!(parts && + (parts[1] != ajaxLocParts[1] || parts[2] != ajaxLocParts[2] || + (parts[3] || (parts[1] === "http:" ? 80 : 443)) != + (ajaxLocParts[3] || (ajaxLocParts[1] === "http:" ? 80 : 443))) + ); + } + + // Convert data if not already a string + if (s.data && s.processData && typeof s.data !== "string") { + s.data = jQuery.param(s.data, s.traditional); + } + + // Apply prefilters + inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); + + // If request was aborted inside a prefilter, stop there + if (state === 2) { + return false; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test(s.type); + + // Watch for a new set of requests + if (fireGlobals && jQuery.active++ === 0) { + jQuery.event.trigger("ajaxStart"); + } + + // More options handling for requests with no content + if (!s.hasContent) { + + // If data is available, append data to url + if (s.data) { + s.url += (rquery.test(s.url) ? "&" : "?") + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if (s.cache === false) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace(rts, "$1_=" + ts); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : ""); + } + } + + // Set the correct header, if data is being sent + if (s.data && s.hasContent && s.contentType !== false || options.contentType) { + jqXHR.setRequestHeader("Content-Type", s.contentType); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if (s.ifModified) { + ifModifiedKey = ifModifiedKey || s.url; + if (jQuery.lastModified[ifModifiedKey]) { + jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[ifModifiedKey]); + } + if (jQuery.etag[ifModifiedKey]) { + jqXHR.setRequestHeader("If-None-Match", jQuery.etag[ifModifiedKey]); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? + s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : + s.accepts["*"] + ); + + // Check for headers option + for (i in s.headers) { + jqXHR.setRequestHeader(i, s.headers[i]); + } + + // Allow custom headers/mimetypes and early abort + if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2)) { + // Abort if not done already + jqXHR.abort(); + return false; + + } + + // Install callbacks on deferreds + for (i in { success: 1, error: 1, complete: 1 }) { + jqXHR[i](s[i]); + } + + // Get transport + transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); + + // If no transport, we auto-abort + if (!transport) { + done(-1, "No Transport"); + } else { + jqXHR.readyState = 1; + // Send global event + if (fireGlobals) { + globalEventContext.trigger("ajaxSend", [jqXHR, s]); + } + // Timeout + if (s.async && s.timeout > 0) { + timeoutTimer = setTimeout(function () { + jqXHR.abort("timeout"); + }, s.timeout); + } + + try { + state = 1; + transport.send(requestHeaders, done); + } catch (e) { + // Propagate exception as error if not done + if (state < 2) { + done(-1, e); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }; + jQuery.ajaxPrefilter = function (dataTypeExpression, func) { + /// + /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). + /// + /// + /// An optional string containing one or more space-separated dataTypes + /// + /// + /// A handler to set default values for future Ajax requests. + /// + /// + + + if (typeof dataTypeExpression !== "string") { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + if (jQuery.isFunction(func)) { + var dataTypes = dataTypeExpression.toLowerCase().split(rspacesAjax), + i = 0, + length = dataTypes.length, + dataType, + list, + placeBefore; + + // For each dataType in the dataTypeExpression + for (; i < length; i++) { + dataType = dataTypes[i]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test(dataType); + if (placeBefore) { + dataType = dataType.substr(1) || "*"; + } + list = structure[dataType] = structure[dataType] || []; + // then we add to the structure accordingly + list[placeBefore ? "unshift" : "push"](func); + } + } + }; + jQuery.ajaxSettings = { + "url": 'http://localhost:25812/', + "isLocal": false, + "global": true, + "type": 'GET', + "contentType": 'application/x-www-form-urlencoded; charset=UTF-8', + "processData": true, + "async": true, + "accepts": {}, + "contents": {}, + "responseFields": {}, + "converters": {}, + "flatOptions": {}, + "jsonp": 'callback' + }; + jQuery.ajaxSetup = function (target, settings) { + /// + /// Set default values for future Ajax requests. + /// + /// + /// A set of key/value pairs that configure the default Ajax request. All options are optional. + /// + + if (settings) { + // Building a settings object + ajaxExtend(target, jQuery.ajaxSettings); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend(target, settings); + return target; + }; + jQuery.ajaxTransport = function (dataTypeExpression, func) { + + + if (typeof dataTypeExpression !== "string") { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + if (jQuery.isFunction(func)) { + var dataTypes = dataTypeExpression.toLowerCase().split(rspacesAjax), + i = 0, + length = dataTypes.length, + dataType, + list, + placeBefore; + + // For each dataType in the dataTypeExpression + for (; i < length; i++) { + dataType = dataTypes[i]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test(dataType); + if (placeBefore) { + dataType = dataType.substr(1) || "*"; + } + list = structure[dataType] = structure[dataType] || []; + // then we add to the structure accordingly + list[placeBefore ? "unshift" : "push"](func); + } + } + }; + jQuery.attr = function (elem, name, value, pass) { + + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + if (pass && name in jQuery.attrFn) { + return jQuery(elem)[name](value); + } + + // Fallback to prop when attributes are not supported + if (typeof elem.getAttribute === "undefined") { + return jQuery.prop(elem, name, value); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if (notxml) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[name] || (rboolean.test(name) ? boolHook : nodeHook); + } + + if (value !== undefined) { + + if (value === null) { + jQuery.removeAttr(elem, name); + return; + + } else if (hooks && "set" in hooks && notxml && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + elem.setAttribute(name, "" + value); + return value; + } + + } else if (hooks && "get" in hooks && notxml && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + + ret = elem.getAttribute(name); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }; + jQuery.attrFn = { + "val": true, + "css": true, + "html": true, + "text": true, + "data": true, + "width": true, + "height": true, + "offset": true, + "blur": true, + "focus": true, + "focusin": true, + "focusout": true, + "load": true, + "resize": true, + "scroll": true, + "unload": true, + "click": true, + "dblclick": true, + "mousedown": true, + "mouseup": true, + "mousemove": true, + "mouseover": true, + "mouseout": true, + "mouseenter": true, + "mouseleave": true, + "change": true, + "select": true, + "submit": true, + "keydown": true, + "keypress": true, + "keyup": true, + "error": true, + "contextmenu": true + }; + jQuery.attrHooks = { + "type": {}, + "value": {}, + "tabindex": {} + }; + jQuery.bindReady = function () { + + if (readyList) { + return; + } + + readyList = jQuery.Callbacks("once memory"); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if (document.readyState === "complete") { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout(jQuery.ready, 1); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if (document.addEventListener) { + // Use the handy event callback + document.addEventListener("DOMContentLoaded", DOMContentLoaded, false); + + // A fallback to window.onload, that will always work + window.addEventListener("load", jQuery.ready, false); + + // If IE event model is used + } else if (document.attachEvent) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent("onload", jQuery.ready); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch (e) { } + + if (document.documentElement.doScroll && toplevel) { + doScrollCheck(); + } + } + }; + jQuery.boxModel = true; + jQuery.browser = { + "msie": true, + "version": '10.0' + }; + jQuery.buildFragment = function (args, nodes, scripts) { + + var fragment, cacheable, cacheresults, doc, + first = args[0]; + + // nodes may contain either an explicit document object, + // a jQuery collection or context object. + // If nodes[0] contains a valid object to assign to doc + if (nodes && nodes[0]) { + doc = nodes[0].ownerDocument || nodes[0]; + } + + // Ensure that an attr object doesn't incorrectly stand in as a document object + // Chrome and Firefox seem to allow this to occur and will throw exception + // Fixes #8950 + if (!doc.createDocumentFragment) { + doc = document; + } + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if (args.length === 1 && typeof first === "string" && first.length < 512 && doc === document && + first.charAt(0) === "<" && !rnocache.test(first) && + (jQuery.support.checkClone || !rchecked.test(first)) && + (jQuery.support.html5Clone || !rnoshimcache.test(first))) { + + cacheable = true; + + cacheresults = jQuery.fragments[first]; + if (cacheresults && cacheresults !== 1) { + fragment = cacheresults; + } + } + + if (!fragment) { + fragment = doc.createDocumentFragment(); + jQuery.clean(args, doc, fragment, scripts); + } + + if (cacheable) { + jQuery.fragments[first] = cacheresults ? fragment : 1; + } + + return { fragment: fragment, cacheable: cacheable }; + }; + jQuery.cache = {}; + jQuery.camelCase = function (string) { + + return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase); + }; + jQuery.clean = function (elems, context, fragment, scripts) { + + var checkScriptType, script, j, + ret = []; + + context = context || document; + + // !context.createElement fails in IE with an error but returns typeof 'object' + if (typeof context.createElement === "undefined") { + context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + } + + for (var i = 0, elem; (elem = elems[i]) != null; i++) { + if (typeof elem === "number") { + elem += ""; + } + + if (!elem) { + continue; + } + + // Convert html string into DOM nodes + if (typeof elem === "string") { + if (!rhtml.test(elem)) { + elem = context.createTextNode(elem); + } else { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); + + // Trim whitespace, otherwise indexOf won't work as expected + var tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase(), + wrap = wrapMap[tag] || wrapMap._default, + depth = wrap[0], + div = context.createElement("div"), + safeChildNodes = safeFragment.childNodes, + remove; + + // Append wrapper element to unknown element safe doc fragment + if (context === document) { + // Use the fragment we've already created for this document + safeFragment.appendChild(div); + } else { + // Use a fragment created with the owner document + createSafeFragment(context).appendChild(div); + } + + // Go to html and back, then peel off extra wrappers + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while (depth--) { + div = div.lastChild; + } + + // Remove IE's autoinserted from table fragments + if (!jQuery.support.tbody) { + + // String was a , *may* have spurious + var hasBody = rtbody.test(elem), + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare or + wrap[1] === "
    " && !hasBody ? + div.childNodes : + []; + + for (j = tbody.length - 1; j >= 0 ; --j) { + if (jQuery.nodeName(tbody[j], "tbody") && !tbody[j].childNodes.length) { + tbody[j].parentNode.removeChild(tbody[j]); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if (!jQuery.support.leadingWhitespace && rleadingWhitespace.test(elem)) { + div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]), div.firstChild); + } + + elem = div.childNodes; + + // Clear elements from DocumentFragment (safeFragment or otherwise) + // to avoid hoarding elements. Fixes #11356 + if (div) { + div.parentNode.removeChild(div); + + // Guard against -1 index exceptions in FF3.6 + if (safeChildNodes.length > 0) { + remove = safeChildNodes[safeChildNodes.length - 1]; + + if (remove && remove.parentNode) { + remove.parentNode.removeChild(remove); + } + } + } + } + } + + // Resets defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + var len; + if (!jQuery.support.appendChecked) { + if (elem[0] && typeof (len = elem.length) === "number") { + for (j = 0; j < len; j++) { + findInputs(elem[j]); + } + } else { + findInputs(elem); + } + } + + if (elem.nodeType) { + ret.push(elem); + } else { + ret = jQuery.merge(ret, elem); + } + } + + if (fragment) { + checkScriptType = function (elem) { + return !elem.type || rscriptType.test(elem.type); + }; + for (i = 0; ret[i]; i++) { + script = ret[i]; + if (scripts && jQuery.nodeName(script, "script") && (!script.type || rscriptType.test(script.type))) { + scripts.push(script.parentNode ? script.parentNode.removeChild(script) : script); + + } else { + if (script.nodeType === 1) { + var jsTags = jQuery.grep(script.getElementsByTagName("script"), checkScriptType); + + ret.splice.apply(ret, [i + 1, 0].concat(jsTags)); + } + fragment.appendChild(script); + } + } + } + + return ret; + }; + jQuery.cleanData = function (elems) { + + var data, id, + cache = jQuery.cache, + special = jQuery.event.special, + deleteExpando = jQuery.support.deleteExpando; + + for (var i = 0, elem; (elem = elems[i]) != null; i++) { + if (elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) { + continue; + } + + id = elem[jQuery.expando]; + + if (id) { + data = cache[id]; + + if (data && data.events) { + for (var type in data.events) { + if (special[type]) { + jQuery.event.remove(elem, type); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent(elem, type, data.handle); + } + } + + // Null the DOM reference to avoid IE6/7/8 leak (#7054) + if (data.handle) { + data.handle.elem = null; + } + } + + if (deleteExpando) { + delete elem[jQuery.expando]; + + } else if (elem.removeAttribute) { + elem.removeAttribute(jQuery.expando); + } + + delete cache[id]; + } + } + }; + jQuery.clone = function (elem, dataAndEvents, deepDataAndEvents) { + + var srcElements, + destElements, + i, + // IE<=8 does not properly clone detached, unknown element nodes + clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test("<" + elem.nodeName + ">") ? + elem.cloneNode(true) : + shimCloneNode(elem); + + if ((!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes(elem, clone); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll(elem); + destElements = getAll(clone); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for (i = 0; srcElements[i]; ++i) { + // Ensure that the destination node is not null; Fixes #9587 + if (destElements[i]) { + cloneFixAttributes(srcElements[i], destElements[i]); + } + } + } + + // Copy the events from the original to the clone + if (dataAndEvents) { + cloneCopyEvent(elem, clone); + + if (deepDataAndEvents) { + srcElements = getAll(elem); + destElements = getAll(clone); + + for (i = 0; srcElements[i]; ++i) { + cloneCopyEvent(srcElements[i], destElements[i]); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }; + jQuery.contains = function (a, b) { + /// + /// Check to see if a DOM element is within another DOM element. + /// + /// + /// The DOM element that may contain the other element. + /// + /// + /// The DOM element that may be contained by the other element. + /// + /// + + return a !== b && (a.contains ? a.contains(b) : true); + }; + jQuery.css = function (elem, name, extra) { + + var ret, hooks; + + // Make sure that we're working with the right name + name = jQuery.camelCase(name); + hooks = jQuery.cssHooks[name]; + name = jQuery.cssProps[name] || name; + + // cssFloat needs a special treatment + if (name === "cssFloat") { + name = "float"; + } + + // If a hook was provided get the computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, true, extra)) !== undefined) { + return ret; + + // Otherwise, if a way to get the computed value exists, use that + } else if (curCSS) { + return curCSS(elem, name); + } + }; + jQuery.cssHooks = { + "opacity": {}, + "height": {}, + "width": {}, + "margin": {}, + "padding": {}, + "borderWidth": {} + }; + jQuery.cssNumber = { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }; + jQuery.cssProps = { "float": 'cssFloat' }; + jQuery.curCSS = function (elem, name, extra) { + + var ret, hooks; + + // Make sure that we're working with the right name + name = jQuery.camelCase(name); + hooks = jQuery.cssHooks[name]; + name = jQuery.cssProps[name] || name; + + // cssFloat needs a special treatment + if (name === "cssFloat") { + name = "float"; + } + + // If a hook was provided get the computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, true, extra)) !== undefined) { + return ret; + + // Otherwise, if a way to get the computed value exists, use that + } else if (curCSS) { + return curCSS(elem, name); + } + }; + jQuery.data = function (elem, name, data, pvt /* Internal Use Only */) { + /// + /// 1: Store arbitrary data associated with the specified element. Returns the value that was set. + /// 1.1 - jQuery.data(element, key, value) + /// 2: Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// 2.1 - jQuery.data(element, key) + /// 2.2 - jQuery.data(element) + /// + /// + /// The DOM element to associate with the data. + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value. + /// + /// + + if (!jQuery.acceptData(elem)) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[internalKey] : elem[internalKey] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ((!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined) { + return; + } + + if (!id) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if (isNode) { + elem[internalKey] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if (!cache[id]) { + cache[id] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if (!isNode) { + cache[id].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if (typeof name === "object" || typeof name === "function") { + if (pvt) { + cache[id] = jQuery.extend(cache[id], name); + } else { + cache[id].data = jQuery.extend(cache[id].data, name); + } + } + + privateCache = thisCache = cache[id]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if (!pvt) { + if (!thisCache.data) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if (data !== undefined) { + thisCache[jQuery.camelCase(name)] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if (isEvents && !thisCache[name]) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if (getByName) { + + // First Try to find as-is property data + ret = thisCache[name]; + + // Test for null|undefined property data + if (ret == null) { + + // Try to find the camelCased property + ret = thisCache[jQuery.camelCase(name)]; + } + } else { + ret = thisCache; + } + + return ret; + }; + jQuery.dequeue = function (elem, type) { + /// + /// Execute the next function on the queue for the matched element. + /// + /// + /// A DOM element from which to remove and execute a queued function. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + type = type || "fx"; + + var queue = jQuery.queue(elem, type), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if (fn === "inprogress") { + fn = queue.shift(); + } + + if (fn) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if (type === "fx") { + queue.unshift("inprogress"); + } + + jQuery._data(elem, type + ".run", hooks); + fn.call(elem, function () { + jQuery.dequeue(elem, type); + }, hooks); + } + + if (!queue.length) { + jQuery.removeData(elem, type + "queue " + type + ".run", true); + handleQueueMarkDefer(elem, type, "queue"); + } + }; + jQuery.dir = function (elem, dir, until) { + + var matched = [], + cur = elem[dir]; + + while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) { + if (cur.nodeType === 1) { + matched.push(cur); + } + cur = cur[dir]; + } + return matched; + }; + jQuery.each = function (object, callback, args) { + /// + /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. + /// + /// + /// The object or array to iterate over. + /// + /// + /// The function that will be executed on every object. + /// + /// + + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if (args) { + if (isObj) { + for (name in object) { + if (callback.apply(object[name], args) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback.apply(object[i++], args) === false) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if (isObj) { + for (name in object) { + if (callback.call(object[name], name, object[name]) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback.call(object[i], i, object[i++]) === false) { + break; + } + } + } + } + + return object; + }; + jQuery.easing = {}; + jQuery.error = function (msg) { + /// + /// Takes a string and throws an exception containing it. + /// + /// + /// The message to send out. + /// + + throw new Error(msg); + }; + jQuery.etag = {}; + jQuery.event = { + "global": {}, + "customEvent": {}, + "props": ['attrChange', 'attrName', 'relatedNode', 'srcElement', 'altKey', 'bubbles', 'cancelable', 'ctrlKey', 'currentTarget', 'eventPhase', 'metaKey', 'relatedTarget', 'shiftKey', 'target', 'timeStamp', 'view', 'which'], + "fixHooks": {}, + "keyHooks": {}, + "mouseHooks": {}, + "special": {}, + "triggered": {} + }; + jQuery.expr = { + "order": ['ID', 'CLASS', 'NAME', 'TAG'], + "match": {}, + "leftMatch": {}, + "attrMap": {}, + "attrHandle": {}, + "relative": {}, + "find": {}, + "preFilter": {}, + "filters": {}, + "setFilters": {}, + "filter": {}, + ":": {} + }; + jQuery.extend = function () { + /// + /// Merge the contents of two or more objects together into the first object. + /// 1 - jQuery.extend(target, object1, objectN) + /// 2 - jQuery.extend(deep, target, object1, objectN) + /// + /// + /// If true, the merge becomes recursive (aka. deep copy). + /// + /// + /// The object to extend. It will receive the new properties. + /// + /// + /// An object containing additional properties to merge in. + /// + /// + /// Additional objects containing properties to merge in. + /// + /// + + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.filter = function (expr, elems, not) { + + if (not) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [] : + jQuery.find.matches(expr, elems); + }; + jQuery.find = function (query, context, extra, seed) { + + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if (!seed && !Sizzle.isXML(context)) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(query); + + if (match && (context.nodeType === 1 || context.nodeType === 9)) { + // Speed-up: Sizzle("TAG") + if (match[1]) { + return makeArray(context.getElementsByTagName(query), extra); + + // Speed-up: Sizzle(".CLASS") + } else if (match[2] && Expr.find.CLASS && context.getElementsByClassName) { + return makeArray(context.getElementsByClassName(match[2]), extra); + } + } + + if (context.nodeType === 9) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if (query === "body" && context.body) { + return makeArray([context.body], extra); + + // Speed-up: Sizzle("#ID") + } else if (match && match[3]) { + var elem = context.getElementById(match[3]); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return items + // by name instead of ID + if (elem.id === match[3]) { + return makeArray([elem], extra); + } + + } else { + return makeArray([], extra); + } + } + + try { + return makeArray(context.querySelectorAll(query), extra); + } catch (qsaError) { } + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if (context.nodeType === 1 && context.nodeName.toLowerCase() !== "object") { + var oldContext = context, + old = context.getAttribute("id"), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test(query); + + if (!old) { + context.setAttribute("id", nid); + } else { + nid = nid.replace(/'/g, "\\$&"); + } + if (relativeHierarchySelector && hasParent) { + context = context.parentNode; + } + + try { + if (!relativeHierarchySelector || hasParent) { + return makeArray(context.querySelectorAll("[id='" + nid + "'] " + query), extra); + } + + } catch (pseudoError) { + } finally { + if (!old) { + oldContext.removeAttribute("id"); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + jQuery.fn = { + "selector": '', + "jquery": '1.7.2', + "length": 0 + }; + jQuery.fragments = {}; + jQuery.fx = function (elem, options, prop) { + + this.options = options; + this.elem = elem; + this.prop = prop; + + options.orig = options.orig || {}; + }; + jQuery.get = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP GET request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; + jQuery.getJSON = function (url, data, callback) { + /// + /// Load JSON-encoded data from the server using a GET HTTP request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, data, callback, "json"); + }; + jQuery.getScript = function (url, callback) { + /// + /// Load a JavaScript file from the server using a GET HTTP request, then execute it. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, undefined, callback, "script"); + }; + jQuery.globalEval = function (data) { + /// + /// Execute some JavaScript code globally. + /// + /// + /// The JavaScript code to execute. + /// + + if (data && rnotwhite.test(data)) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + (window.execScript || function (data) { + window["eval"].call(window, data); + })(data); + } + }; + jQuery.grep = function (elems, callback, inv) { + /// + /// Finds the elements of an array which satisfy a filter function. The original array is not affected. + /// + /// + /// The array to search through. + /// + /// + /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. + /// + /// + /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. + /// + /// + + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for (var i = 0, length = elems.length; i < length; i++) { + retVal = !!callback(elems[i], i); + if (inv !== retVal) { + ret.push(elems[i]); + } + } + + return ret; + }; + jQuery.guid = 1; + jQuery.hasData = function (elem) { + /// + /// Determine whether an element has any jQuery data associated with it. + /// + /// + /// A DOM element to be checked for data. + /// + /// + + elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando]; + return !!elem && !isEmptyDataObject(elem); + }; + jQuery.holdReady = function (hold) { + /// + /// Holds or releases the execution of jQuery's ready event. + /// + /// + /// Indicates whether the ready hold is being requested or released + /// + /// + + if (hold) { + jQuery.readyWait++; + } else { + jQuery.ready(true); + } + }; + jQuery.inArray = function (elem, array, i) { + /// + /// Search for a specified value within an array and return its index (or -1 if not found). + /// + /// + /// The value to search for. + /// + /// + /// An array through which to search. + /// + /// + /// The index of the array at which to begin the search. The default is 0, which will search the whole array. + /// + /// + + var len; + + if (array) { + if (indexOf) { + return indexOf.call(array, elem, i); + } + + len = array.length; + i = i ? i < 0 ? Math.max(0, len + i) : i : 0; + + for (; i < len; i++) { + // Skip accessing in sparse arrays + if (i in array && array[i] === elem) { + return i; + } + } + } + + return -1; + }; + jQuery.isArray = Array.isArray || function (obj) { + /// + /// Determine whether the argument is an array. + /// + /// + return jQuery.type(obj) === "array"; + }; + jQuery.isEmptyObject = function (obj) { + /// + /// Check to see if an object is empty (contains no properties). + /// + /// + /// The object that will be checked to see if it's empty. + /// + /// + + for (var name in obj) { + return false; + } + return true; + }; + jQuery.isFunction = function (obj) { + /// + /// Determine if the argument passed is a Javascript function object. + /// + /// + /// Object to test whether or not it is a function. + /// + /// + + return jQuery.type(obj) === "function"; + }; + jQuery.isNumeric = function (obj) { + /// + /// Determines whether its argument is a number. + /// + /// + /// The value to be tested. + /// + /// + + return !isNaN(parseFloat(obj)) && isFinite(obj); + }; + jQuery.isPlainObject = function (obj) { + /// + /// Check to see if an object is a plain object (created using "{}" or "new Object"). + /// + /// + /// The object that will be checked to see if it's a plain object. + /// + /// + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { + return false; + } + + try { + // Not own constructor property must be Object + if (obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + } catch (e) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for (key in obj) { } + + return key === undefined || hasOwn.call(obj, key); + }; + jQuery.isReady = true; + jQuery.isWindow = function (obj) { + /// + /// Determine whether the argument is a window. + /// + /// + /// Object to test whether or not it is a window. + /// + /// + + return obj != null && obj == obj.window; + }; + jQuery.isXMLDoc = function (elem) { + /// + /// Check to see if a DOM node is within an XML document (or is an XML document). + /// + /// + /// The DOM node that will be checked to see if it's in an XML document. + /// + /// + + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + jQuery.lastModified = {}; + jQuery.makeArray = function (array, results) { + /// + /// Convert an array-like object into a true JavaScript array. + /// + /// + /// Any object to turn into a native Array. + /// + /// + + var ret = results || []; + + if (array != null) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type(array); + + if (array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow(array)) { + push.call(ret, array); + } else { + jQuery.merge(ret, array); + } + } + + return ret; + }; + jQuery.map = function (elems, callback, arg) { + /// + /// Translate all items in an array or object to new array of items. + /// 1 - jQuery.map(array, callback(elementOfArray, indexInArray)) + /// 2 - jQuery.map(arrayOrObject, callback( value, indexOrKey )) + /// + /// + /// The Array to translate. + /// + /// + /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. + /// + /// + + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ((length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems)); + + // Go through the array, translating each of the items to their + if (isArray) { + for (; i < length; i++) { + value = callback(elems[i], i, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + + // Go through every key on the object, + } else { + for (key in elems) { + value = callback(elems[key], key, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply([], ret); + }; + jQuery.merge = function (first, second) { + /// + /// Merge the contents of two arrays together into the first array. + /// + /// + /// The first array to merge, the elements of second added. + /// + /// + /// The second array to merge into the first, unaltered. + /// + /// + + var i = first.length, + j = 0; + + if (typeof second.length === "number") { + for (var l = second.length; j < l; j++) { + first[i++] = second[j]; + } + + } else { + while (second[j] !== undefined) { + first[i++] = second[j++]; + } + } + + first.length = i; + + return first; + }; + jQuery.noConflict = function (deep) { + /// + /// Relinquish jQuery's control of the $ variable. + /// + /// + /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). + /// + /// + + if (window.$ === jQuery) { + window.$ = _$; + } + + if (deep && window.jQuery === jQuery) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + jQuery.noData = { + "embed": true, + "object": 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000', + "applet": true + }; + jQuery.nodeName = function (elem, name) { + + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }; + jQuery.noop = function () { + /// + /// An empty function. + /// + /// + }; + jQuery.now = function () { + /// + /// Return a number representing the current time. + /// + /// + + return (new Date()).getTime(); + }; + jQuery.nth = function (cur, result, dir, elem) { + + result = result || 1; + var num = 0; + + for (; cur; cur = cur[dir]) { + if (cur.nodeType === 1 && ++num === result) { + break; + } + } + + return cur; + }; + jQuery.offset = {}; + jQuery.param = function (a, traditional) { + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// 1 - jQuery.param(obj) + /// 2 - jQuery.param(obj, traditional) + /// + /// + /// An array or object to serialize. + /// + /// + /// A Boolean indicating whether to perform a traditional "shallow" serialization. + /// + /// + + var s = [], + add = function (key, value) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction(value) ? value() : value; + s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if (traditional === undefined) { + traditional = jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if (jQuery.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) { + // Serialize the form elements + jQuery.each(a, function () { + add(this.name, this.value); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for (var prefix in a) { + buildParams(prefix, a[prefix], traditional, add); + } + } + + // Return the resulting serialization + return s.join("&").replace(r20, "+"); + }; + jQuery.parseJSON = function (data) { + /// + /// Takes a well-formed JSON string and returns the resulting JavaScript object. + /// + /// + /// The JSON string to parse. + /// + /// + + if (typeof data !== "string" || !data) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim(data); + + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.parse) { + return window.JSON.parse(data); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if (rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]") + .replace(rvalidbraces, ""))) { + + return (new Function("return " + data))(); + + } + jQuery.error("Invalid JSON: " + data); + }; + jQuery.parseXML = function (data) { + /// + /// Parses a string into an XML document. + /// + /// + /// a well-formed XML string to be parsed + /// + /// + + if (typeof data !== "string" || !data) { + return null; + } + var xml, tmp; + try { + if (window.DOMParser) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString(data, "text/xml"); + } else { // IE + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = "false"; + xml.loadXML(data); + } + } catch (e) { + xml = undefined; + } + if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + jQuery.error("Invalid XML: " + data); + } + return xml; + }; + jQuery.post = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP POST request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; + jQuery.prop = function (elem, name, value) { + + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + if (notxml) { + // Fix name and attach hooks + name = jQuery.propFix[name] || name; + hooks = jQuery.propHooks[name]; + } + + if (value !== undefined) { + if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + return (elem[name] = value); + } + + } else { + if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + return elem[name]; + } + } + }; + jQuery.propFix = { + "tabindex": 'tabIndex', + "readonly": 'readOnly', + "for": 'htmlFor', + "class": 'className', + "maxlength": 'maxLength', + "cellspacing": 'cellSpacing', + "cellpadding": 'cellPadding', + "rowspan": 'rowSpan', + "colspan": 'colSpan', + "usemap": 'useMap', + "frameborder": 'frameBorder', + "contenteditable": 'contentEditable' + }; + jQuery.propHooks = { + "tabIndex": {}, + "selected": {} + }; + jQuery.proxy = function (fn, context) { + /// + /// Takes a function and returns a new one that will always have a particular context. + /// 1 - jQuery.proxy(function, context) + /// 2 - jQuery.proxy(context, name) + /// + /// + /// The function whose context will be changed. + /// + /// + /// The object to which the context (this) of the function should be set. + /// + /// + + if (typeof context === "string") { + var tmp = fn[context]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if (!jQuery.isFunction(fn)) { + return undefined; + } + + // Simulated bind + var args = slice.call(arguments, 2), + proxy = function () { + return fn.apply(context, args.concat(slice.call(arguments))); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }; + jQuery.queue = function (elem, type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched element. + /// 1.1 - jQuery.queue(element, queueName) + /// 2: Manipulate the queue of functions to be executed on the matched element. + /// 2.1 - jQuery.queue(element, queueName, newQueue) + /// 2.2 - jQuery.queue(element, queueName, callback()) + /// + /// + /// A DOM element where the array of queued functions is attached. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var q; + if (elem) { + type = (type || "fx") + "queue"; + q = jQuery._data(elem, type); + + // Speed up dequeue by getting out quickly if this is just a lookup + if (data) { + if (!q || jQuery.isArray(data)) { + q = jQuery._data(elem, type, jQuery.makeArray(data)); + } else { + q.push(data); + } + } + return q || []; + } + }; + jQuery.ready = function (wait) { + + // Either a released hold or an DOMready/load event and not yet ready + if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if (!document.body) { + return setTimeout(jQuery.ready, 1); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if (wait !== true && --jQuery.readyWait > 0) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith(document, [jQuery]); + + // Trigger any bound ready events + if (jQuery.fn.trigger) { + jQuery(document).trigger("ready").off("ready"); + } + } + }; + jQuery.readyWait = 0; + jQuery.removeAttr = function (elem, value) { + + var propName, attrNames, name, l, isBool, + i = 0; + + if (value && elem.nodeType === 1) { + attrNames = value.toLowerCase().split(rspace); + l = attrNames.length; + + for (; i < l; i++) { + name = attrNames[i]; + + if (name) { + propName = jQuery.propFix[name] || name; + isBool = rboolean.test(name); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if (!isBool) { + jQuery.attr(elem, name, ""); + } + elem.removeAttribute(getSetAttribute ? name : propName); + + // Set corresponding property to false for boolean attributes + if (isBool && propName in elem) { + elem[propName] = false; + } + } + } + } + }; + jQuery.removeData = function (elem, name, pvt /* Internal Use Only */) { + /// + /// Remove a previously-stored piece of data. + /// + /// + /// A DOM element from which to remove data. + /// + /// + /// A string naming the piece of data to remove. + /// + /// + + if (!jQuery.acceptData(elem)) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[internalKey] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if (!cache[id]) { + return; + } + + if (name) { + + thisCache = pvt ? cache[id] : cache[id].data; + + if (thisCache) { + + // Support array or space separated string names for data keys + if (!jQuery.isArray(name)) { + + // try the string as a key before any manipulation + if (name in thisCache) { + name = [name]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase(name); + if (name in thisCache) { + name = [name]; + } else { + name = name.split(" "); + } + } + } + + for (i = 0, l = name.length; i < l; i++) { + delete thisCache[name[i]]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if (!(pvt ? isEmptyDataObject : jQuery.isEmptyObject)(thisCache)) { + return; + } + } + } + + // See jQuery.data for more information + if (!pvt) { + delete cache[id].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if (!isEmptyDataObject(cache[id])) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if (jQuery.support.deleteExpando || !cache.setInterval) { + delete cache[id]; + } else { + cache[id] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if (isNode) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if (jQuery.support.deleteExpando) { + delete elem[internalKey]; + } else if (elem.removeAttribute) { + elem.removeAttribute(internalKey); + } else { + elem[internalKey] = null; + } + } + }; + jQuery.removeEvent = function (elem, type, handle) { + + if (elem.removeEventListener) { + elem.removeEventListener(type, handle, false); + } + }; + jQuery.sibling = function (n, elem) { + + var r = []; + + for (; n; n = n.nextSibling) { + if (n.nodeType === 1 && n !== elem) { + r.push(n); + } + } + + return r; + }; + jQuery.speed = function (speed, easing, fn) { + + var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { + complete: fn || !fn && easing || + jQuery.isFunction(speed) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction(easing) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if (opt.queue == null || opt.queue === true) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function (noUnmark) { + if (jQuery.isFunction(opt.old)) { + opt.old.call(this); + } + + if (opt.queue) { + jQuery.dequeue(this, opt.queue); + } else if (noUnmark !== false) { + jQuery._unmark(this); + } + }; + + return opt; + }; + jQuery.style = function (elem, name, value, extra) { + + // Don't set styles on text and comment nodes + if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) { + return; + } + + // Make sure that we're working with the right name + var ret, type, origName = jQuery.camelCase(name), + style = elem.style, hooks = jQuery.cssHooks[origName]; + + name = jQuery.cssProps[origName] || origName; + + // Check if we're setting a value + if (value !== undefined) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if (type === "string" && (ret = rrelNum.exec(value))) { + value = (+(ret[1] + 1) * +ret[2]) + parseFloat(jQuery.css(elem, name)); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if (value == null || type === "number" && isNaN(value)) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if (type === "number" && !jQuery.cssNumber[origName]) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value)) !== undefined) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[name] = value; + } catch (e) { } + } + + } else { + // If a hook was provided get the non-computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) { + return ret; + } + + // Otherwise just get the value from the style object + return style[name]; + } + }; + jQuery.sub = function () { + /// + /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. + /// + /// + + function jQuerySub(selector, context) { + return new jQuerySub.fn.init(selector, context); + } + jQuery.extend(true, jQuerySub, this); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init(selector, context) { + if (context && context instanceof jQuery && !(context instanceof jQuerySub)) { + context = jQuerySub(context); + } + + return jQuery.fn.init.call(this, selector, context, rootjQuerySub); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }; + jQuery.support = { + "leadingWhitespace": true, + "tbody": true, + "htmlSerialize": true, + "style": true, + "hrefNormalized": true, + "opacity": true, + "cssFloat": true, + "checkOn": true, + "optSelected": false, + "getSetAttribute": true, + "enctype": true, + "html5Clone": true, + "submitBubbles": true, + "changeBubbles": true, + "focusinBubbles": true, + "deleteExpando": true, + "noCloneEvent": true, + "inlineBlockNeedsLayout": false, + "shrinkWrapBlocks": false, + "reliableMarginRight": true, + "pixelMargin": true, + "boxModel": true, + "noCloneChecked": false, + "optDisabled": true, + "radioValue": false, + "checkClone": true, + "appendChecked": true, + "ajax": true, + "cors": true, + "reliableHiddenOffsets": true, + "doesNotAddBorder": true, + "doesAddBorderForTableAndCells": true, + "fixedPosition": true, + "subtractsBorderForOverflowNotVisible": false, + "doesNotIncludeMarginInBodyOffset": true + }; + jQuery.swap = function (elem, options, callback) { + + var old = {}, + ret, name; + + // Remember the old values, and insert the new ones + for (name in options) { + old[name] = elem.style[name]; + elem.style[name] = options[name]; + } + + ret = callback.call(elem); + + // Revert the old values + for (name in options) { + elem.style[name] = old[name]; + } + + return ret; + }; + jQuery.text = function (elem) { + + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if (nodeType) { + if (nodeType === 1 || nodeType === 9 || nodeType === 11) { + // Use textContent || innerText for elements + if (typeof elem.textContent === 'string') { + return elem.textContent; + } else if (typeof elem.innerText === 'string') { + // Replace IE's carriage returns + return elem.innerText.replace(rReturn, ''); + } else { + // Traverse it's children + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText(elem); + } + } + } else if (nodeType === 3 || nodeType === 4) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for (i = 0; (node = elem[i]) ; i++) { + // Do not traverse comment nodes + if (node.nodeType !== 8) { + ret += getText(node); + } + } + } + return ret; + }; + jQuery.trim = function (text) { + /// + /// Remove the whitespace from the beginning and end of a string. + /// + /// + /// The string to trim. + /// + /// + + return text == null ? + "" : + trim.call(text); + }; + jQuery.type = function (obj) { + /// + /// Determine the internal JavaScript [[Class]] of an object. + /// + /// + /// Object to get the internal JavaScript [[Class]] of. + /// + /// + + return obj == null ? + String(obj) : + class2type[toString.call(obj)] || "object"; + }; + jQuery.uaMatch = function (ua) { + + ua = ua.toLowerCase(); + + var match = rwebkit.exec(ua) || + ropera.exec(ua) || + rmsie.exec(ua) || + ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }; + jQuery.unique = function (results) { + /// + /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. + /// + /// + /// The Array of DOM elements. + /// + /// + + if (sortOrder) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if (hasDuplicate) { + for (var i = 1; i < results.length; i++) { + if (results[i] === results[i - 1]) { + results.splice(i--, 1); + } + } + } + } + + return results; + }; + jQuery.uuid = 0; + jQuery.valHooks = { + "option": {}, + "select": {}, + "radio": {}, + "checkbox": {} + }; + jQuery.when = function (firstParam) { + /// + /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. + /// + /// + /// One or more Deferred objects, or plain JavaScript objects. + /// + /// + + var args = sliceDeferred.call(arguments, 0), + i = 0, + length = args.length, + pValues = new Array(length), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction(firstParam.promise) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc(i) { + return function (value) { + args[i] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value; + if (!(--count)) { + deferred.resolveWith(deferred, args); + } + }; + } + function progressFunc(i) { + return function (value) { + pValues[i] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value; + deferred.notifyWith(promise, pValues); + }; + } + if (length > 1) { + for (; i < length; i++) { + if (args[i] && args[i].promise && jQuery.isFunction(args[i].promise)) { + args[i].promise().then(resolveFunc(i), deferred.reject, progressFunc(i)); + } else { + --count; + } + } + if (!count) { + deferred.resolveWith(deferred, args); + } + } else if (deferred !== firstParam) { + deferred.resolveWith(deferred, length ? [firstParam] : []); + } + return promise; + }; + jQuery.Event.prototype.isDefaultPrevented = function returnFalse() { + /// + /// Returns whether event.preventDefault() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isImmediatePropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopImmediatePropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isPropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopPropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.preventDefault = function () { + /// + /// If this method is called, the default action of the event will not be triggered. + /// + /// + + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + + // if preventDefault exists run it on the original event + if (e.preventDefault) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }; + jQuery.Event.prototype.stopImmediatePropagation = function () { + /// + /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. + /// + + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }; + jQuery.Event.prototype.stopPropagation = function () { + /// + /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. + /// + + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + // if stopPropagation exists run it on the original event + if (e.stopPropagation) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }; + jQuery.prototype._toggle = function (fn) { + + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function (event) { + // Figure out which function to execute + var lastToggle = (jQuery._data(this, "lastToggle" + fn.guid) || 0) % i; + jQuery._data(this, "lastToggle" + fn.guid, lastToggle + 1); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[lastToggle].apply(this, arguments) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while (i < args.length) { + args[i++].guid = guid; + } + + return this.click(toggler); + }; + jQuery.prototype.add = function (selector, context) { + /// + /// Add elements to the set of matched elements. + /// 1 - add(selector) + /// 2 - add(elements) + /// 3 - add(html) + /// 4 - add(jQuery object) + /// 5 - add(selector, context) + /// + /// + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// + /// + /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. + /// + /// + + var set = typeof selector === "string" ? + jQuery(selector, context) : + jQuery.makeArray(selector && selector.nodeType ? [selector] : selector), + all = jQuery.merge(this.get(), set); + + return this.pushStack(isDisconnected(set[0]) || isDisconnected(all[0]) ? + all : + jQuery.unique(all)); + }; + jQuery.prototype.addClass = function (value) { + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// 1 - addClass(className) + /// 2 - addClass(function(index, currentClass)) + /// + /// + /// One or more class names to be added to the class attribute of each matched element. + /// + /// + + var classNames, i, l, elem, + setClass, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).addClass(value.call(this, j, this.className)); + }); + } + + if (value && typeof value === "string") { + classNames = value.split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1) { + if (!elem.className && classNames.length === 1) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for (c = 0, cl = classNames.length; c < cl; c++) { + if (!~setClass.indexOf(" " + classNames[c] + " ")) { + setClass += classNames[c] + " "; + } + } + elem.className = jQuery.trim(setClass); + } + } + } + } + + return this; + }; + jQuery.prototype.after = function () { + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// 1 - after(content, content) + /// 2 - after(function(index)) + /// + /// + /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. + /// + /// + + if (this[0] && this[0].parentNode) { + return this.domManip(arguments, false, function (elem) { + this.parentNode.insertBefore(elem, this.nextSibling); + }); + } else if (arguments.length) { + var set = this.pushStack(this, "after", arguments); + set.push.apply(set, jQuery.clean(arguments)); + return set; + } + }; + jQuery.prototype.ajaxComplete = function (f) { + /// + /// Register a handler to be called when Ajax requests complete. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxError = function (f) { + /// + /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxSend = function (f) { + /// + /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxStart = function (f) { + /// + /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxStop = function (f) { + /// + /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxSuccess = function (f) { + /// + /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.andSelf = function () { + /// + /// Add the previous set of elements on the stack to the current set. + /// + /// + + return this.add(this.prevObject); + }; + jQuery.prototype.animate = function (prop, speed, easing, callback) { + /// + /// Perform a custom animation of a set of CSS properties. + /// 1 - animate(properties, duration, easing, complete) + /// 2 - animate(properties, options) + /// + /// + /// A map of CSS properties that the animation will move toward. + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + var optall = jQuery.speed(speed, easing, callback); + + if (jQuery.isEmptyObject(prop)) { + return this.each(optall.complete, [false]); + } + + // Do not change referenced properties as per-property easing will be lost + prop = jQuery.extend({}, prop); + + function doAnimation() { + // XXX 'this' does not always have a nodeName when running the + // test suite + + if (optall.queue === false) { + jQuery._mark(this); + } + + var opt = jQuery.extend({}, optall), + isElement = this.nodeType === 1, + hidden = isElement && jQuery(this).is(":hidden"), + name, val, p, e, hooks, replace, + parts, start, end, unit, + method; + + // will store per property easing and be used to determine when an animation is complete + opt.animatedProperties = {}; + + // first pass over propertys to expand / normalize + for (p in prop) { + name = jQuery.camelCase(p); + if (p !== name) { + prop[name] = prop[p]; + delete prop[p]; + } + + if ((hooks = jQuery.cssHooks[name]) && "expand" in hooks) { + replace = hooks.expand(prop[name]); + delete prop[name]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'p' from above because we have the correct "name" + for (p in replace) { + if (!(p in prop)) { + prop[p] = replace[p]; + } + } + } + } + + for (name in prop) { + val = prop[name]; + // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) + if (jQuery.isArray(val)) { + opt.animatedProperties[name] = val[1]; + val = prop[name] = val[0]; + } else { + opt.animatedProperties[name] = opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing'; + } + + if (val === "hide" && hidden || val === "show" && !hidden) { + return opt.complete.call(this); + } + + if (isElement && (name === "height" || name === "width")) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opt.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if (jQuery.css(this, "display") === "inline" && + jQuery.css(this, "float") === "none") { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if (!jQuery.support.inlineBlockNeedsLayout || defaultDisplay(this.nodeName) === "inline") { + this.style.display = "inline-block"; + + } else { + this.style.zoom = 1; + } + } + } + } + + if (opt.overflow != null) { + this.style.overflow = "hidden"; + } + + for (p in prop) { + e = new jQuery.fx(this, opt, p); + val = prop[p]; + + if (rfxtypes.test(val)) { + + // Tracks whether to show or hide based on private + // data attached to the element + method = jQuery._data(this, "toggle" + p) || (val === "toggle" ? hidden ? "show" : "hide" : 0); + if (method) { + jQuery._data(this, "toggle" + p, method === "show" ? "hide" : "show"); + e[method](); + } else { + e[val](); + } + + } else { + parts = rfxnum.exec(val); + start = e.cur(); + + if (parts) { + end = parseFloat(parts[2]); + unit = parts[3] || (jQuery.cssNumber[p] ? "" : "px"); + + // We need to compute starting value + if (unit !== "px") { + jQuery.style(this, p, (end || 1) + unit); + start = ((end || 1) / e.cur()) * start; + jQuery.style(this, p, start + unit); + } + + // If a +=/-= token was provided, we're doing a relative animation + if (parts[1]) { + end = ((parts[1] === "-=" ? -1 : 1) * end) + start; + } + + e.custom(start, end, unit); + + } else { + e.custom(start, val, ""); + } + } + } + + // For JS strict compliance + return true; + } + + return optall.queue === false ? + this.each(doAnimation) : + this.queue(optall.queue, doAnimation); + }; + jQuery.prototype.append = function () { + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// 1 - append(content, content) + /// 2 - append(function(index, html)) + /// + /// + /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1) { + this.appendChild(elem); + } + }); + }; + jQuery.prototype.appendTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the end of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.attr = function (name, value) { + /// + /// 1: Get the value of an attribute for the first element in the set of matched elements. + /// 1.1 - attr(attributeName) + /// 2: Set one or more attributes for the set of matched elements. + /// 2.1 - attr(attributeName, value) + /// 2.2 - attr(map) + /// 2.3 - attr(attributeName, function(index, attr)) + /// + /// + /// The name of the attribute to set. + /// + /// + /// A value to set for the attribute. + /// + /// + + return jQuery.access(this, jQuery.attr, name, value, arguments.length > 1); + }; + jQuery.prototype.before = function () { + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// 1 - before(content, content) + /// 2 - before(function) + /// + /// + /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. + /// + /// + + if (this[0] && this[0].parentNode) { + return this.domManip(arguments, false, function (elem) { + this.parentNode.insertBefore(elem, this); + }); + } else if (arguments.length) { + var set = jQuery.clean(arguments); + set.push.apply(set, this.toArray()); + return this.pushStack(set, "before", arguments); + } + }; + jQuery.prototype.bind = function (types, data, fn) { + /// + /// Attach a handler to an event for the elements. + /// 1 - bind(eventType, eventData, handler(eventObject)) + /// 2 - bind(eventType, eventData, preventBubble) + /// 3 - bind(events) + /// + /// + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return this.on(types, null, data, fn); + }; + jQuery.prototype.blur = function (data, fn) { + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// 1 - blur(handler(eventObject)) + /// 2 - blur(eventData, handler(eventObject)) + /// 3 - blur() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.change = function (data, fn) { + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// 1 - change(handler(eventObject)) + /// 2 - change(eventData, handler(eventObject)) + /// 3 - change() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.children = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.clearQueue = function (type) { + /// + /// Remove from the queue all items that have not yet been run. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.queue(type || "fx", []); + }; + jQuery.prototype.click = function (data, fn) { + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// 1 - click(handler(eventObject)) + /// 2 - click(eventData, handler(eventObject)) + /// 3 - click() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.clone = function (dataAndEvents, deepDataAndEvents) { + /// + /// Create a deep copy of the set of matched elements. + /// 1 - clone(withDataAndEvents) + /// 2 - clone(withDataAndEvents, deepWithDataAndEvents) + /// + /// + /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. + /// + /// + /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). + /// + /// + + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function () { + return jQuery.clone(this, dataAndEvents, deepDataAndEvents); + }); + }; + jQuery.prototype.closest = function (selectors, context) { + /// + /// 1: Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree. + /// 1.1 - closest(selector) + /// 1.2 - closest(selector, context) + /// 1.3 - closest(jQuery object) + /// 1.4 - closest(element) + /// 2: Gets an array of all the elements and selectors matched against the current element up through the DOM tree. + /// 2.1 - closest(selectors, context) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. + /// + /// + + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if (jQuery.isArray(selectors)) { + var level = 1; + + while (cur && cur.ownerDocument && cur !== context) { + for (i = 0; i < selectors.length; i++) { + + if (jQuery(cur).is(selectors[i])) { + ret.push({ selector: selectors[i], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test(selectors) || typeof selectors !== "string" ? + jQuery(selectors, context || this.context) : + 0; + + for (i = 0, l = this.length; i < l; i++) { + cur = this[i]; + + while (cur) { + if (pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors)) { + ret.push(cur); + break; + + } else { + cur = cur.parentNode; + if (!cur || !cur.ownerDocument || cur === context || cur.nodeType === 11) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique(ret) : ret; + + return this.pushStack(ret, "closest", selectors); + }; + jQuery.prototype.constructor = function (selector, context) { + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }; + jQuery.prototype.contents = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, including text and comment nodes. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.contextmenu = function (data, fn) { + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.css = function (name, value) { + /// + /// 1: Get the value of a style property for the first element in the set of matched elements. + /// 1.1 - css(propertyName) + /// 2: Set one or more CSS properties for the set of matched elements. + /// 2.1 - css(propertyName, value) + /// 2.2 - css(propertyName, function(index, value)) + /// 2.3 - css(map) + /// + /// + /// A CSS property name. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, function (elem, name, value) { + return value !== undefined ? + jQuery.style(elem, name, value) : + jQuery.css(elem, name); + }, name, value, arguments.length > 1); + }; + jQuery.prototype.data = function (key, value) { + /// + /// 1: Store arbitrary data associated with the matched elements. + /// 1.1 - data(key, value) + /// 1.2 - data(obj) + /// 2: Returns value at named data store for the first element in the jQuery collection, as set by data(name, value). + /// 2.1 - data(key) + /// 2.2 - data() + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value; it can be any Javascript type including Array or Object. + /// + /// + + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if (key === undefined) { + if (this.length) { + data = jQuery.data(elem); + + if (elem.nodeType === 1 && !jQuery._data(elem, "parsedAttrs")) { + attr = elem.attributes; + for (l = attr.length; i < l; i++) { + name = attr[i].name; + + if (name.indexOf("data-") === 0) { + name = jQuery.camelCase(name.substring(5)); + + dataAttr(elem, name, data[name]); + } + } + jQuery._data(elem, "parsedAttrs", true); + } + } + + return data; + } + + // Sets multiple values + if (typeof key === "object") { + return this.each(function () { + jQuery.data(this, key); + }); + } + + parts = key.split(".", 2); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access(this, function (value) { + + if (value === undefined) { + data = this.triggerHandler("getData" + part, [parts[0]]); + + // Try to fetch any internally stored data first + if (data === undefined && elem) { + data = jQuery.data(elem, key); + data = dataAttr(elem, key, data); + } + + return data === undefined && parts[1] ? + this.data(parts[0]) : + data; + } + + parts[1] = value; + this.each(function () { + var self = jQuery(this); + + self.triggerHandler("setData" + part, parts); + jQuery.data(this, key, value); + self.triggerHandler("changeData" + part, parts); + }); + }, null, value, arguments.length > 1, null, false); + }; + jQuery.prototype.dblclick = function (data, fn) { + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// 1 - dblclick(handler(eventObject)) + /// 2 - dblclick(eventData, handler(eventObject)) + /// 3 - dblclick() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.delay = function (time, type) { + /// + /// Set a timer to delay execution of subsequent items in the queue. + /// + /// + /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue(type, function (next, hooks) { + var timeout = setTimeout(next, time); + hooks.stop = function () { + clearTimeout(timeout); + }; + }); + }; + jQuery.prototype.delegate = function (selector, types, data, fn) { + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// 1 - delegate(selector, eventType, handler(eventObject)) + /// 2 - delegate(selector, eventType, eventData, handler(eventObject)) + /// 3 - delegate(selector, events) + /// + /// + /// A selector to filter the elements that trigger the event. + /// + /// + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + return this.on(types, selector, data, fn); + }; + jQuery.prototype.dequeue = function (type) { + /// + /// Execute the next function on the queue for the matched elements. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.each(function () { + jQuery.dequeue(this, type); + }); + }; + jQuery.prototype.detach = function (selector) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + return this.remove(selector, true); + }; + jQuery.prototype.die = function (types, fn) { + /// + /// 1: Remove all event handlers previously attached using .live() from the elements. + /// 1.1 - die() + /// 2: Remove an event handler previously attached using .live() from the elements. + /// 2.1 - die(eventType, handler) + /// 2.2 - die(eventTypes) + /// + /// + /// A string containing a JavaScript event type, such as click or keydown. + /// + /// + /// The function that is no longer to be executed. + /// + /// + + jQuery(this.context).off(types, this.selector || "**", fn); + return this; + }; + jQuery.prototype.domManip = function (args, table, callback) { + + var results, first, fragment, parent, + value = args[0], + scripts = []; + + // We can't cloneNode fragments that contain checked, in WebKit + if (!jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test(value)) { + return this.each(function () { + jQuery(this).domManip(args, table, callback, true); + }); + } + + if (jQuery.isFunction(value)) { + return this.each(function (i) { + var self = jQuery(this); + args[0] = value.call(this, i, table ? self.html() : undefined); + self.domManip(args, table, callback); + }); + } + + if (this[0]) { + parent = value && value.parentNode; + + // If we're in a fragment, just use that instead of building a new one + if (jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length) { + results = { fragment: parent }; + + } else { + results = jQuery.buildFragment(args, this, scripts); + } + + fragment = results.fragment; + + if (fragment.childNodes.length === 1) { + first = fragment = fragment.firstChild; + } else { + first = fragment.firstChild; + } + + if (first) { + table = table && jQuery.nodeName(first, "tr"); + + for (var i = 0, l = this.length, lastIndex = l - 1; i < l; i++) { + callback.call( + table ? + root(this[i], first) : + this[i], + // Make sure that we do not leak memory by inadvertently discarding + // the original fragment (which might have attached data) instead of + // using it; in addition, use the original fragment object for the last + // item instead of first because it can end up being emptied incorrectly + // in certain situations (Bug #8070). + // Fragments from the fragment cache must always be cloned and never used + // in place. + results.cacheable || (l > 1 && i < lastIndex) ? + jQuery.clone(fragment, true, true) : + fragment + ); + } + } + + if (scripts.length) { + jQuery.each(scripts, function (i, elem) { + if (elem.src) { + jQuery.ajax({ + type: "GET", + global: false, + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval((elem.text || elem.textContent || elem.innerHTML || "").replace(rcleanScript, "/*$0*/")); + } + + if (elem.parentNode) { + elem.parentNode.removeChild(elem); + } + }); + } + } + + return this; + }; + jQuery.prototype.each = function (callback, args) { + /// + /// Iterate over a jQuery object, executing a function for each matched element. + /// + /// + /// A function to execute for each matched element. + /// + /// + + return jQuery.each(this, callback, args); + }; + jQuery.prototype.empty = function () { + /// + /// Remove all child nodes of the set of matched elements from the DOM. + /// + /// + + for (var i = 0, elem; (elem = this[i]) != null; i++) { + // Remove element nodes and prevent memory leaks + if (elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + } + + // Remove any remaining nodes + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + return this; + }; + jQuery.prototype.end = function () { + /// + /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. + /// + /// + + return this.prevObject || this.constructor(null); + }; + jQuery.prototype.eq = function (i) { + /// + /// Reduce the set of matched elements to the one at the specified index. + /// 1 - eq(index) + /// 2 - eq(-index) + /// + /// + /// An integer indicating the 0-based position of the element. + /// + /// + + i = +i; + return i === -1 ? + this.slice(i) : + this.slice(i, i + 1); + }; + jQuery.prototype.error = function (data, fn) { + /// + /// Bind an event handler to the "error" JavaScript event. + /// 1 - error(handler(eventObject)) + /// 2 - error(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.extend = function () { + + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.prototype.fadeIn = function (speed, easing, callback) { + /// + /// Display the matched elements by fading them to opaque. + /// 1 - fadeIn(duration, callback) + /// 2 - fadeIn(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeOut = function (speed, easing, callback) { + /// + /// Hide the matched elements by fading them to transparent. + /// 1 - fadeOut(duration, callback) + /// 2 - fadeOut(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeTo = function (speed, to, easing, callback) { + /// + /// Adjust the opacity of the matched elements. + /// 1 - fadeTo(duration, opacity, callback) + /// 2 - fadeTo(duration, opacity, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A number between 0 and 1 denoting the target opacity. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.filter(":hidden").css("opacity", 0).show().end() + .animate({ opacity: to }, speed, easing, callback); + }; + jQuery.prototype.fadeToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements by animating their opacity. + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.filter = function (selector) { + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// 1 - filter(selector) + /// 2 - filter(function(index)) + /// 3 - filter(element) + /// 4 - filter(jQuery object) + /// + /// + /// A string containing a selector expression to match the current set of elements against. + /// + /// + + return this.pushStack(winnow(this, selector, true), "filter", selector); + }; + jQuery.prototype.find = function (selector) { + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// 1 - find(selector) + /// 2 - find(jQuery object) + /// 3 - find(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var self = this, + i, l; + + if (typeof selector !== "string") { + return jQuery(selector).filter(function () { + for (i = 0, l = self.length; i < l; i++) { + if (jQuery.contains(self[i], this)) { + return true; + } + } + }); + } + + var ret = this.pushStack("", "find", selector), + length, n, r; + + for (i = 0, l = this.length; i < l; i++) { + length = ret.length; + jQuery.find(selector, this[i], ret); + + if (i > 0) { + // Make sure that the results are unique + for (n = length; n < ret.length; n++) { + for (r = 0; r < length; r++) { + if (ret[r] === ret[n]) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }; + jQuery.prototype.first = function () { + /// + /// Reduce the set of matched elements to the first in the set. + /// + /// + + return this.eq(0); + }; + jQuery.prototype.focus = function (data, fn) { + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// 1 - focus(handler(eventObject)) + /// 2 - focus(eventData, handler(eventObject)) + /// 3 - focus() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusin = function (data, fn) { + /// + /// Bind an event handler to the "focusin" event. + /// 1 - focusin(handler(eventObject)) + /// 2 - focusin(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusout = function (data, fn) { + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// 1 - focusout(handler(eventObject)) + /// 2 - focusout(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.get = function (num) { + /// + /// Retrieve the DOM elements matched by the jQuery object. + /// + /// + /// A zero-based integer indicating which element to retrieve. + /// + /// + + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + (num < 0 ? this[this.length + num] : this[num]); + }; + jQuery.prototype.has = function (target) { + /// + /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. + /// 1 - has(selector) + /// 2 - has(contained) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var targets = jQuery(target); + return this.filter(function () { + for (var i = 0, l = targets.length; i < l; i++) { + if (jQuery.contains(this, targets[i])) { + return true; + } + } + }); + }; + jQuery.prototype.hasClass = function (selector) { + /// + /// Determine whether any of the matched elements are assigned the given class. + /// + /// + /// The class name to search for. + /// + /// + + var className = " " + selector + " ", + i = 0, + l = this.length; + for (; i < l; i++) { + if (this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf(className) > -1) { + return true; + } + } + + return false; + }; + jQuery.prototype.height = function (value) { + /// + /// 1: Get the current computed height for the first element in the set of matched elements. + /// 1.1 - height() + /// 2: Set the CSS height of every matched element. + /// 2.1 - height(value) + /// 2.2 - height(function(index, height)) + /// + /// + /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). + /// + /// + + return jQuery.access(this, function (elem, type, value) { + var doc, docElemProp, orig, ret; + + if (jQuery.isWindow(elem)) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[clientProp]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[clientProp] || docElemProp; + } + + // Get document width or height + if (elem.nodeType === 9) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if (doc[clientProp] >= doc[scrollProp]) { + return doc[clientProp]; + } + + return Math.max( + elem.body[scrollProp], doc[scrollProp], + elem.body[offsetProp], doc[offsetProp] + ); + } + + // Get width or height on the element + if (value === undefined) { + orig = jQuery.css(elem, type); + ret = parseFloat(orig); + return jQuery.isNumeric(ret) ? ret : orig; + } + + // Set the width or height on the element + jQuery(elem).css(type, value); + }, type, value, arguments.length, null); + }; + jQuery.prototype.hide = function (speed, easing, callback) { + /// + /// Hide the matched elements. + /// 1 - hide() + /// 2 - hide(duration, callback) + /// 3 - hide(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + if (speed || speed === 0) { + return this.animate(genFx("hide", 3), speed, easing, callback); + + } else { + var elem, display, + i = 0, + j = this.length; + + for (; i < j; i++) { + elem = this[i]; + if (elem.style) { + display = jQuery.css(elem, "display"); + + if (display !== "none" && !jQuery._data(elem, "olddisplay")) { + jQuery._data(elem, "olddisplay", display); + } + } + } + + // Set the display of the elements in a second loop + // to avoid the constant reflow + for (i = 0; i < j; i++) { + if (this[i].style) { + this[i].style.display = "none"; + } + } + + return this; + } + }; + jQuery.prototype.hover = function (fnOver, fnOut) { + /// + /// 1: Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. + /// 1.1 - hover(handlerIn(eventObject), handlerOut(eventObject)) + /// 2: Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements. + /// 2.1 - hover(handlerInOut(eventObject)) + /// + /// + /// A function to execute when the mouse pointer enters the element. + /// + /// + /// A function to execute when the mouse pointer leaves the element. + /// + /// + + return this.mouseenter(fnOver).mouseleave(fnOut || fnOver); + }; + jQuery.prototype.html = function (value) { + /// + /// 1: Get the HTML contents of the first element in the set of matched elements. + /// 1.1 - html() + /// 2: Set the HTML contents of each element in the set of matched elements. + /// 2.1 - html(htmlString) + /// 2.2 - html(function(index, oldhtml)) + /// + /// + /// A string of HTML to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if (value === undefined) { + return elem.nodeType === 1 ? + elem.innerHTML.replace(rinlinejQuery, "") : + null; + } + + + if (typeof value === "string" && !rnoInnerhtml.test(value) && + (jQuery.support.leadingWhitespace || !rleadingWhitespace.test(value)) && + !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { + + value = value.replace(rxhtmlTag, "<$1>"); + + try { + for (; i < l; i++) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if (elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch (e) { } + } + + if (elem) { + this.empty().append(value); + } + }, null, value, arguments.length); + }; + jQuery.prototype.index = function (elem) { + /// + /// Search for a given element from among the matched elements. + /// 1 - index() + /// 2 - index(selector) + /// 3 - index(element) + /// + /// + /// A selector representing a jQuery collection in which to look for an element. + /// + /// + + + // No argument, return index in parent + if (!elem) { + return (this[0] && this[0].parentNode) ? this.prevAll().length : -1; + } + + // index in selector + if (typeof elem === "string") { + return jQuery.inArray(this[0], jQuery(elem)); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this); + }; + jQuery.prototype.init = function (selector, context, rootjQuery) { + + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if (!selector) { + return this; + } + + // Handle $(DOMElement) + if (selector.nodeType) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if (selector === "body" && !context && document.body) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if (typeof selector === "string") { + // Are we dealing with HTML string or an ID? + if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [null, selector, null]; + + } else { + match = quickExpr.exec(selector); + } + + // Verify a match, and that no context was specified for #id + if (match && (match[1] || !context)) { + + // HANDLE: $(html) -> $(array) + if (match[1]) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec(selector); + + if (ret) { + if (jQuery.isPlainObject(context)) { + selector = [document.createElement(ret[1])]; + jQuery.fn.attr.call(selector, context, true); + + } else { + selector = [doc.createElement(ret[1])]; + } + + } else { + ret = jQuery.buildFragment([match[1]], [doc]); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge(this, selector); + + // HANDLE: $("#id") + } else { + elem = document.getElementById(match[2]); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return items + // by name instead of ID + if (elem.id !== match[2]) { + return rootjQuery.find(selector); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if (!context || context.jquery) { + return (context || rootjQuery).find(selector); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor(context).find(selector); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if (jQuery.isFunction(selector)) { + return rootjQuery.ready(selector); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray(selector, this); + }; + jQuery.prototype.innerHeight = function () { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding but not border. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, "padding")) : + this[type]() : + null; + }; + jQuery.prototype.innerWidth = function () { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding but not border. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, "padding")) : + this[type]() : + null; + }; + jQuery.prototype.insertAfter = function (selector) { + /// + /// Insert every element in the set of matched elements after the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.insertBefore = function (selector) { + /// + /// Insert every element in the set of matched elements before the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.is = function (selector) { + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// 1 - is(selector) + /// 2 - is(function(index)) + /// 3 - is(jQuery object) + /// 4 - is(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test(selector) ? + jQuery(selector, this.context).index(this[0]) >= 0 : + jQuery.filter(selector, this).length > 0 : + this.filter(selector).length > 0); + }; + jQuery.prototype.keydown = function (data, fn) { + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// 1 - keydown(handler(eventObject)) + /// 2 - keydown(eventData, handler(eventObject)) + /// 3 - keydown() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keypress = function (data, fn) { + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// 1 - keypress(handler(eventObject)) + /// 2 - keypress(eventData, handler(eventObject)) + /// 3 - keypress() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keyup = function (data, fn) { + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// 1 - keyup(handler(eventObject)) + /// 2 - keyup(eventData, handler(eventObject)) + /// 3 - keyup() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.last = function () { + /// + /// Reduce the set of matched elements to the final one in the set. + /// + /// + + return this.eq(-1); + }; + jQuery.prototype.length = 0; + jQuery.prototype.live = function (types, data, fn) { + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// 1 - live(events, handler(eventObject)) + /// 2 - live(events, data, handler(eventObject)) + /// 3 - live(events-map) + /// + /// + /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + jQuery(this.context).on(types, this.selector, data, fn); + return this; + }; + jQuery.prototype.load = function (url, params, callback) { + /// + /// 1: Bind an event handler to the "load" JavaScript event. + /// 1.1 - load(handler(eventObject)) + /// 1.2 - load(eventData, handler(eventObject)) + /// 2: Load data from the server and place the returned HTML into the matched element. + /// 2.1 - load(url, data, complete(responseText, textStatus, XMLHttpRequest)) + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed when the request completes. + /// + /// + + if (typeof url !== "string" && _load) { + return _load.apply(this, arguments); + + // Don't do a request if no elements are being requested + } else if (!this.length) { + return this; + } + + var off = url.indexOf(" "); + if (off >= 0) { + var selector = url.slice(off, url.length); + url = url.slice(0, off); + } + + // Default to a GET request + var type = "GET"; + + // If the second parameter was provided + if (params) { + // If it's a function + if (jQuery.isFunction(params)) { + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if (typeof params === "object") { + params = jQuery.param(params, jQuery.ajaxSettings.traditional); + type = "POST"; + } + } + + var self = this; + + // Request the remote document + jQuery.ajax({ + url: url, + type: type, + dataType: "html", + data: params, + // Complete callback (responseText is used internally) + complete: function (jqXHR, status, responseText) { + // Store the response as specified by the jqXHR object + responseText = jqXHR.responseText; + // If successful, inject the HTML into all the matched elements + if (jqXHR.isResolved()) { + // #4825: Get the actual response in case + // a dataFilter is present in ajaxSettings + jqXHR.done(function (r) { + responseText = r; + }); + // See if a selector was specified + self.html(selector ? + // Create a dummy div to hold the results + jQuery("
    ") + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append(responseText.replace(rscript, "")) + + // Locate the specified elements + .find(selector) : + + // If not, just inject the full result + responseText); + } + + if (callback) { + self.each(callback, [responseText, status, jqXHR]); + } + } + }); + + return this; + }; + jQuery.prototype.map = function (callback) { + /// + /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. + /// + /// + /// A function object that will be invoked for each element in the current set. + /// + /// + + return this.pushStack(jQuery.map(this, function (elem, i) { + return callback.call(elem, i, elem); + })); + }; + jQuery.prototype.mousedown = function (data, fn) { + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// 1 - mousedown(handler(eventObject)) + /// 2 - mousedown(eventData, handler(eventObject)) + /// 3 - mousedown() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseenter = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// 1 - mouseenter(handler(eventObject)) + /// 2 - mouseenter(eventData, handler(eventObject)) + /// 3 - mouseenter() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseleave = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// 1 - mouseleave(handler(eventObject)) + /// 2 - mouseleave(eventData, handler(eventObject)) + /// 3 - mouseleave() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mousemove = function (data, fn) { + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// 1 - mousemove(handler(eventObject)) + /// 2 - mousemove(eventData, handler(eventObject)) + /// 3 - mousemove() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseout = function (data, fn) { + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// 1 - mouseout(handler(eventObject)) + /// 2 - mouseout(eventData, handler(eventObject)) + /// 3 - mouseout() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseover = function (data, fn) { + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// 1 - mouseover(handler(eventObject)) + /// 2 - mouseover(eventData, handler(eventObject)) + /// 3 - mouseover() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseup = function (data, fn) { + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// 1 - mouseup(handler(eventObject)) + /// 2 - mouseup(eventData, handler(eventObject)) + /// 3 - mouseup() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.next = function (until, selector) { + /// + /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.nextAll = function (until, selector) { + /// + /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.nextUntil = function (until, selector) { + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// 1 - nextUntil(selector, filter) + /// 2 - nextUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching following sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.not = function (selector) { + /// + /// Remove elements from the set of matched elements. + /// 1 - not(selector) + /// 2 - not(elements) + /// 3 - not(function(index)) + /// 4 - not(jQuery object) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return this.pushStack(winnow(this, selector, false), "not", selector); + }; + jQuery.prototype.off = function (types, selector, fn) { + /// + /// Remove an event handler. + /// 1 - off(events, selector, handler(eventObject)) + /// 2 - off(events-map, selector) + /// + /// + /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". + /// + /// + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// + /// + /// A handler function previously attached for the event(s), or the special value false. + /// + /// + + if (types && types.preventDefault && types.handleObj) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery(types.delegateTarget).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if (typeof types === "object") { + // ( types-object [, selector] ) + for (var type in types) { + this.off(type, selector, types[type]); + } + return this; + } + if (selector === false || typeof selector === "function") { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if (fn === false) { + fn = returnFalse; + } + return this.each(function () { + jQuery.event.remove(this, types, fn, selector); + }); + }; + jQuery.prototype.offset = function (options) { + /// + /// 1: Get the current coordinates of the first element in the set of matched elements, relative to the document. + /// 1.1 - offset() + /// 2: Set the current coordinates of every element in the set of matched elements, relative to the document. + /// 2.1 - offset(coordinates) + /// 2.2 - offset(function(index, coords)) + /// + /// + /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. + /// + /// + + if (arguments.length) { + return options === undefined ? + this : + this.each(function (i) { + jQuery.offset.setOffset(this, options, i); + }); + } + + var elem = this[0], + doc = elem && elem.ownerDocument; + + if (!doc) { + return null; + } + + if (elem === doc.body) { + return jQuery.offset.bodyOffset(elem); + } + + return getOffset(elem, doc, doc.documentElement); + }; + jQuery.prototype.offsetParent = function () { + /// + /// Get the closest ancestor element that is positioned. + /// + /// + + return this.map(function () { + var offsetParent = this.offsetParent || document.body; + while (offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static")) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent; + }); + }; + jQuery.prototype.on = function (types, selector, data, fn, /*INTERNAL*/ one) { + /// + /// Attach an event handler function for one or more events to the selected elements. + /// 1 - on(events, selector, data, handler(eventObject)) + /// 2 - on(events-map, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + var origFn, type; + + // Types can be a map of types/handlers + if (typeof types === "object") { + // ( types-Object, selector, data ) + if (typeof selector !== "string") { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for (type in types) { + this.on(type, selector, data, types[type], one); + } + return this; + } + + if (data == null && fn == null) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if (fn == null) { + if (typeof selector === "string") { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if (fn === false) { + fn = returnFalse; + } else if (!fn) { + return this; + } + + if (one === 1) { + origFn = fn; + fn = function (event) { + // Can use an empty set, since event contains the info + jQuery().off(event); + return origFn.apply(this, arguments); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || (origFn.guid = jQuery.guid++); + } + return this.each(function () { + jQuery.event.add(this, types, fn, data, selector); + }); + }; + jQuery.prototype.one = function (types, selector, data, fn) { + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// 1 - one(events, data, handler(eventObject)) + /// 2 - one(events, selector, data, handler(eventObject)) + /// 3 - one(events-map, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + return this.on(types, selector, data, fn, 1); + }; + jQuery.prototype.outerHeight = function (margin) { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, margin ? "margin" : "border")) : + this[type]() : + null; + }; + jQuery.prototype.outerWidth = function (margin) { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding and border. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, margin ? "margin" : "border")) : + this[type]() : + null; + }; + jQuery.prototype.parent = function (until, selector) { + /// + /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.parents = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.parentsUntil = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - parentsUntil(selector, filter) + /// 2 - parentsUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching ancestor elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.position = function () { + /// + /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. + /// + /// + + if (!this[0]) { + return null; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat(jQuery.css(elem, "marginTop")) || 0; + offset.left -= parseFloat(jQuery.css(elem, "marginLeft")) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat(jQuery.css(offsetParent[0], "borderTopWidth")) || 0; + parentOffset.left += parseFloat(jQuery.css(offsetParent[0], "borderLeftWidth")) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }; + jQuery.prototype.prepend = function () { + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// 1 - prepend(content, content) + /// 2 - prepend(function(index, html)) + /// + /// + /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1) { + this.insertBefore(elem, this.firstChild); + } + }); + }; + jQuery.prototype.prependTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the beginning of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.prev = function (until, selector) { + /// + /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.prevAll = function (until, selector) { + /// + /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.prevUntil = function (until, selector) { + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - prevUntil(selector, filter) + /// 2 - prevUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.promise = function (type, object) { + /// + /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. + /// + /// + /// The type of queue that needs to be observed. + /// + /// + /// Object onto which the promise methods have to be attached + /// + /// + + if (typeof type !== "string") { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if (!(--count)) { + defer.resolveWith(elements, [elements]); + } + } + while (i--) { + if ((tmp = jQuery.data(elements[i], deferDataKey, undefined, true) || + (jQuery.data(elements[i], queueDataKey, undefined, true) || + jQuery.data(elements[i], markDataKey, undefined, true)) && + jQuery.data(elements[i], deferDataKey, jQuery.Callbacks("once memory"), true))) { + count++; + tmp.add(resolve); + } + } + resolve(); + return defer.promise(object); + }; + jQuery.prototype.prop = function (name, value) { + /// + /// 1: Get the value of a property for the first element in the set of matched elements. + /// 1.1 - prop(propertyName) + /// 2: Set one or more properties for the set of matched elements. + /// 2.1 - prop(propertyName, value) + /// 2.2 - prop(map) + /// 2.3 - prop(propertyName, function(index, oldPropertyValue)) + /// + /// + /// The name of the property to set. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, jQuery.prop, name, value, arguments.length > 1); + }; + jQuery.prototype.pushStack = function (elems, name, selector) { + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// 1 - pushStack(elements) + /// 2 - pushStack(elements, name, arguments) + /// + /// + /// An array of elements to push onto the stack and make into a new jQuery object. + /// + /// + /// The name of a jQuery method that generated the array of elements. + /// + /// + /// The arguments that were passed in to the jQuery method (for serialization). + /// + /// + + // Build a new jQuery matched element set + var ret = this.constructor(); + + if (jQuery.isArray(elems)) { + push.apply(ret, elems); + + } else { + jQuery.merge(ret, elems); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if (name === "find") { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if (name) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }; + jQuery.prototype.queue = function (type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched elements. + /// 1.1 - queue(queueName) + /// 2: Manipulate the queue of functions to be executed on the matched elements. + /// 2.1 - queue(queueName, newQueue) + /// 2.2 - queue(queueName, callback( next )) + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var setter = 2; + + if (typeof type !== "string") { + data = type; + type = "fx"; + setter--; + } + + if (arguments.length < setter) { + return jQuery.queue(this[0], type); + } + + return data === undefined ? + this : + this.each(function () { + var queue = jQuery.queue(this, type, data); + + if (type === "fx" && queue[0] !== "inprogress") { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.ready = function (fn) { + /// + /// Specify a function to execute when the DOM is fully loaded. + /// + /// + /// A function to execute after the DOM is ready. + /// + /// + + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add(fn); + + return this; + }; + jQuery.prototype.remove = function (selector, keepData) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + for (var i = 0, elem; (elem = this[i]) != null; i++) { + if (!selector || jQuery.filter(selector, [elem]).length) { + if (!keepData && elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + jQuery.cleanData([elem]); + } + + if (elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + } + + return this; + }; + jQuery.prototype.removeAttr = function (name) { + /// + /// Remove an attribute from each element in the set of matched elements. + /// + /// + /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. + /// + /// + + return this.each(function () { + jQuery.removeAttr(this, name); + }); + }; + jQuery.prototype.removeClass = function (value) { + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// 1 - removeClass(className) + /// 2 - removeClass(function(index, class)) + /// + /// + /// One or more space-separated classes to be removed from the class attribute of each matched element. + /// + /// + + var classNames, i, l, elem, className, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).removeClass(value.call(this, j, this.className)); + }); + } + + if ((value && typeof value === "string") || value === undefined) { + classNames = (value || "").split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1 && elem.className) { + if (value) { + className = (" " + elem.className + " ").replace(rclass, " "); + for (c = 0, cl = classNames.length; c < cl; c++) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim(className); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }; + jQuery.prototype.removeData = function (key) { + /// + /// Remove a previously-stored piece of data. + /// 1 - removeData(name) + /// 2 - removeData(list) + /// + /// + /// A string naming the piece of data to delete. + /// + /// + + return this.each(function () { + jQuery.removeData(this, key); + }); + }; + jQuery.prototype.removeProp = function (name) { + /// + /// Remove a property for the set of matched elements. + /// + /// + /// The name of the property to set. + /// + /// + + name = jQuery.propFix[name] || name; + return this.each(function () { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[name] = undefined; + delete this[name]; + } catch (e) { } + }); + }; + jQuery.prototype.replaceAll = function (selector) { + /// + /// Replace each target element with the set of matched elements. + /// + /// + /// A selector expression indicating which element(s) to replace. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.replaceWith = function (value) { + /// + /// Replace each element in the set of matched elements with the provided new content. + /// 1 - replaceWith(newContent) + /// 2 - replaceWith(function) + /// + /// + /// The content to insert. May be an HTML string, DOM element, or jQuery object. + /// + /// + + if (this[0] && this[0].parentNode) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if (jQuery.isFunction(value)) { + return this.each(function (i) { + var self = jQuery(this), old = self.html(); + self.replaceWith(value.call(this, i, old)); + }); + } + + if (typeof value !== "string") { + value = jQuery(value).detach(); + } + + return this.each(function () { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery(this).remove(); + + if (next) { + jQuery(next).before(value); + } else { + jQuery(parent).append(value); + } + }); + } else { + return this.length ? + this.pushStack(jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value) : + this; + } + }; + jQuery.prototype.resize = function (data, fn) { + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// 1 - resize(handler(eventObject)) + /// 2 - resize(eventData, handler(eventObject)) + /// 3 - resize() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scroll = function (data, fn) { + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// 1 - scroll(handler(eventObject)) + /// 2 - scroll(eventData, handler(eventObject)) + /// 3 - scroll() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scrollLeft = function (val) { + /// + /// 1: Get the current horizontal position of the scroll bar for the first element in the set of matched elements. + /// 1.1 - scrollLeft() + /// 2: Set the current horizontal position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollLeft(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + jQuery.support.boxModel && win.document.documentElement[method] || + win.document.body[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.scrollTop = function (val) { + /// + /// 1: Get the current vertical position of the scroll bar for the first element in the set of matched elements. + /// 1.1 - scrollTop() + /// 2: Set the current vertical position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollTop(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + jQuery.support.boxModel && win.document.documentElement[method] || + win.document.body[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.select = function (data, fn) { + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// 1 - select(handler(eventObject)) + /// 2 - select(eventData, handler(eventObject)) + /// 3 - select() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.serialize = function () { + /// + /// Encode a set of form elements as a string for submission. + /// + /// + + return jQuery.param(this.serializeArray()); + }; + jQuery.prototype.serializeArray = function () { + /// + /// Encode a set of form elements as an array of names and values. + /// + /// + + return this.map(function () { + return this.elements ? jQuery.makeArray(this.elements) : this; + }) + .filter(function () { + return this.name && !this.disabled && + (this.checked || rselectTextarea.test(this.nodeName) || + rinput.test(this.type)); + }) + .map(function (i, elem) { + var val = jQuery(this).val(); + + return val == null ? + null : + jQuery.isArray(val) ? + jQuery.map(val, function (val, i) { + return { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }) : + { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }).get(); + }; + jQuery.prototype.show = function (speed, easing, callback) { + /// + /// Display the matched elements. + /// 1 - show() + /// 2 - show(duration, callback) + /// 3 - show(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + var elem, display; + + if (speed || speed === 0) { + return this.animate(genFx("show", 3), speed, easing, callback); + + } else { + for (var i = 0, j = this.length; i < j; i++) { + elem = this[i]; + + if (elem.style) { + display = elem.style.display; + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if (!jQuery._data(elem, "olddisplay") && display === "none") { + display = elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ((display === "" && jQuery.css(elem, "display") === "none") || + !jQuery.contains(elem.ownerDocument.documentElement, elem)) { + jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName)); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for (i = 0; i < j; i++) { + elem = this[i]; + + if (elem.style) { + display = elem.style.display; + + if (display === "" || display === "none") { + elem.style.display = jQuery._data(elem, "olddisplay") || ""; + } + } + } + + return this; + } + }; + jQuery.prototype.siblings = function (until, selector) { + /// + /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.size = function () { + /// + /// Return the number of elements in the jQuery object. + /// + /// + + return this.length; + }; + jQuery.prototype.slice = function () { + /// + /// Reduce the set of matched elements to a subset specified by a range of indices. + /// + /// + /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. + /// + /// + /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. + /// + /// + + return this.pushStack(slice.apply(this, arguments), + "slice", slice.call(arguments).join(",")); + }; + jQuery.prototype.slideDown = function (speed, easing, callback) { + /// + /// Display the matched elements with a sliding motion. + /// 1 - slideDown(duration, callback) + /// 2 - slideDown(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements with a sliding motion. + /// 1 - slideToggle(duration, callback) + /// 2 - slideToggle(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideUp = function (speed, easing, callback) { + /// + /// Hide the matched elements with a sliding motion. + /// 1 - slideUp(duration, callback) + /// 2 - slideUp(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.stop = function (type, clearQueue, gotoEnd) { + /// + /// Stop the currently-running animation on the matched elements. + /// 1 - stop(clearQueue, jumpToEnd) + /// 2 - stop(queue, clearQueue, jumpToEnd) + /// + /// + /// The name of the queue in which to stop animations. + /// + /// + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// + /// + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + + if (typeof type !== "string") { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if (clearQueue && type !== false) { + this.queue(type || "fx", []); + } + + return this.each(function () { + var index, + hadTimers = false, + timers = jQuery.timers, + data = jQuery._data(this); + + // clear marker counters if we know they won't be + if (!gotoEnd) { + jQuery._unmark(true, this); + } + + function stopQueue(elem, data, index) { + var hooks = data[index]; + jQuery.removeData(elem, index, true); + hooks.stop(gotoEnd); + } + + if (type == null) { + for (index in data) { + if (data[index] && data[index].stop && index.indexOf(".run") === index.length - 4) { + stopQueue(this, data, index); + } + } + } else if (data[index = type + ".run"] && data[index].stop) { + stopQueue(this, data, index); + } + + for (index = timers.length; index--;) { + if (timers[index].elem === this && (type == null || timers[index].queue === type)) { + if (gotoEnd) { + + // force the next step to be the last + timers[index](true); + } else { + timers[index].saveState(); + } + hadTimers = true; + timers.splice(index, 1); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if (!(gotoEnd && hadTimers)) { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.submit = function (data, fn) { + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// 1 - submit(handler(eventObject)) + /// 2 - submit(eventData, handler(eventObject)) + /// 3 - submit() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.text = function (value) { + /// + /// 1: Get the combined text contents of each element in the set of matched elements, including their descendants. + /// 1.1 - text() + /// 2: Set the content of each element in the set of matched elements to the specified text. + /// 2.1 - text(textString) + /// 2.2 - text(function(index, text)) + /// + /// + /// A string of text to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + return value === undefined ? + jQuery.text(this) : + this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value)); + }, null, value, arguments.length); + }; + jQuery.prototype.toArray = function () { + /// + /// Retrieve all the DOM elements contained in the jQuery set, as an array. + /// + /// + + return slice.call(this, 0); + }; + jQuery.prototype.toggle = function (fn, fn2, callback) { + /// + /// 1: Bind two or more handlers to the matched elements, to be executed on alternate clicks. + /// 1.1 - toggle(handler(eventObject), handler(eventObject), handler(eventObject)) + /// 2: Display or hide the matched elements. + /// 2.1 - toggle(duration, callback) + /// 2.2 - toggle(duration, easing, callback) + /// 2.3 - toggle(showOrHide) + /// + /// + /// A function to execute every even time the element is clicked. + /// + /// + /// A function to execute every odd time the element is clicked. + /// + /// + /// Additional handlers to cycle through after clicks. + /// + /// + + var bool = typeof fn === "boolean"; + + if (jQuery.isFunction(fn) && jQuery.isFunction(fn2)) { + this._toggle.apply(this, arguments); + + } else if (fn == null || bool) { + this.each(function () { + var state = bool ? fn : jQuery(this).is(":hidden"); + jQuery(this)[state ? "show" : "hide"](); + }); + + } else { + this.animate(genFx("toggle", 3), fn, fn2, callback); + } + + return this; + }; + jQuery.prototype.toggleClass = function (value, stateVal) { + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// 1 - toggleClass(className) + /// 2 - toggleClass(className, switch) + /// 3 - toggleClass(switch) + /// 4 - toggleClass(function(index, class, switch), switch) + /// + /// + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// + /// + /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. + /// + /// + + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if (jQuery.isFunction(value)) { + return this.each(function (i) { + jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal); + }); + } + + return this.each(function () { + if (type === "string") { + // toggle individual class names + var className, + i = 0, + self = jQuery(this), + state = stateVal, + classNames = value.split(rspace); + + while ((className = classNames[i++])) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass(className); + self[state ? "addClass" : "removeClass"](className); + } + + } else if (type === "undefined" || type === "boolean") { + if (this.className) { + // store className if set + jQuery._data(this, "__className__", this.className); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data(this, "__className__") || ""; + } + }); + }; + jQuery.prototype.trigger = function (type, data) { + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// 1 - trigger(eventType, extraParameters) + /// 2 - trigger(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// Additional parameters to pass along to the event handler. + /// + /// + + return this.each(function () { + jQuery.event.trigger(type, data, this); + }); + }; + jQuery.prototype.triggerHandler = function (type, data) { + /// + /// Execute all handlers attached to an element for an event. + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// An array of additional parameters to pass along to the event handler. + /// + /// + + if (this[0]) { + return jQuery.event.trigger(type, data, this[0], true); + } + }; + jQuery.prototype.unbind = function (types, fn) { + /// + /// Remove a previously-attached event handler from the elements. + /// 1 - unbind(eventType, handler(eventObject)) + /// 2 - unbind(eventType, false) + /// 3 - unbind(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// The function that is to be no longer executed. + /// + /// + + return this.off(types, null, fn); + }; + jQuery.prototype.undelegate = function (selector, types, fn) { + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// 1 - undelegate() + /// 2 - undelegate(selector, eventType) + /// 3 - undelegate(selector, eventType, handler(eventObject)) + /// 4 - undelegate(selector, events) + /// 5 - undelegate(namespace) + /// + /// + /// A selector which will be used to filter the event results. + /// + /// + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1 ? this.off(selector, "**") : this.off(types, selector, fn); + }; + jQuery.prototype.unload = function (data, fn) { + /// + /// Bind an event handler to the "unload" JavaScript event. + /// 1 - unload(handler(eventObject)) + /// 2 - unload(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.unwrap = function () { + /// + /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. + /// + /// + + return this.parent().each(function () { + if (!jQuery.nodeName(this, "body")) { + jQuery(this).replaceWith(this.childNodes); + } + }).end(); + }; + jQuery.prototype.val = function (value) { + /// + /// 1: Get the current value of the first element in the set of matched elements. + /// 1.1 - val() + /// 2: Set the value of each element in the set of matched elements. + /// 2.1 - val(value) + /// 2.2 - val(function(index, value)) + /// + /// + /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. + /// + /// + + var hooks, ret, isFunction, + elem = this[0]; + + if (!arguments.length) { + if (elem) { + hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()]; + + if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction(value); + + return this.each(function (i) { + var self = jQuery(this), val; + + if (this.nodeType !== 1) { + return; + } + + if (isFunction) { + val = value.call(this, i, self.val()); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if (val == null) { + val = ""; + } else if (typeof val === "number") { + val += ""; + } else if (jQuery.isArray(val)) { + val = jQuery.map(val, function (value) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; + + // If set returns undefined, fall back to normal setting + if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) { + this.value = val; + } + }); + }; + jQuery.prototype.width = function (value) { + /// + /// 1: Get the current computed width for the first element in the set of matched elements. + /// 1.1 - width() + /// 2: Set the CSS width of each element in the set of matched elements. + /// 2.1 - width(value) + /// 2.2 - width(function(index, width)) + /// + /// + /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). + /// + /// + + return jQuery.access(this, function (elem, type, value) { + var doc, docElemProp, orig, ret; + + if (jQuery.isWindow(elem)) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[clientProp]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[clientProp] || docElemProp; + } + + // Get document width or height + if (elem.nodeType === 9) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if (doc[clientProp] >= doc[scrollProp]) { + return doc[clientProp]; + } + + return Math.max( + elem.body[scrollProp], doc[scrollProp], + elem.body[offsetProp], doc[offsetProp] + ); + } + + // Get width or height on the element + if (value === undefined) { + orig = jQuery.css(elem, type); + ret = parseFloat(orig); + return jQuery.isNumeric(ret) ? ret : orig; + } + + // Set the width or height on the element + jQuery(elem).css(type, value); + }, type, value, arguments.length, null); + }; + jQuery.prototype.wrap = function (html) { + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// 1 - wrap(wrappingElement) + /// 2 - wrap(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + var isFunction = jQuery.isFunction(html); + + return this.each(function (i) { + jQuery(this).wrapAll(isFunction ? html.call(this, i) : html); + }); + }; + jQuery.prototype.wrapAll = function (html) { + /// + /// Wrap an HTML structure around all elements in the set of matched elements. + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapAll(html.call(this, i)); + }); + } + + if (this[0]) { + // The elements to wrap the target around + var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true); + + if (this[0].parentNode) { + wrap.insertBefore(this[0]); + } + + wrap.map(function () { + var elem = this; + + while (elem.firstChild && elem.firstChild.nodeType === 1) { + elem = elem.firstChild; + } + + return elem; + }).append(this); + } + + return this; + }; + jQuery.prototype.wrapInner = function (html) { + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// 1 - wrapInner(wrappingElement) + /// 2 - wrapInner(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapInner(html.call(this, i)); + }); + } + + return this.each(function () { + var self = jQuery(this), + contents = self.contents(); + + if (contents.length) { + contents.wrapAll(html); + + } else { + self.append(html); + } + }); + }; + jQuery.fn = jQuery.prototype; + jQuery.fn.init.prototype = jQuery.fn; + window.jQuery = window.$ = jQuery; +})(window); \ No newline at end of file diff --git a/Web/Scripts/jquery-1.7.2.js b/Web/Scripts/jquery-1.7.2.js new file mode 100644 index 0000000..3774ff9 --- /dev/null +++ b/Web/Scripts/jquery-1.7.2.js @@ -0,0 +1,9404 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
    a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
    " + + "" + + "
    "; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
    t
    "; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
    "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

    "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
    "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
    ", "
    " ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + col: [ 2, "", "
    " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + +@using (Html.BeginForm("Index", "CreateLog", FormMethod.Post)) +{ + if (!blackBerry) { + @:
    + @ViewBag.Title + } + @Html.ValidationSummary(true) + @Html.EditorForModel() +
    + +
    + if (!blackBerry) + { + @:
    + } +} diff --git a/Web/Views/CreateLog/RecentLogs.cshtml b/Web/Views/CreateLog/RecentLogs.cshtml new file mode 100644 index 0000000..70524be --- /dev/null +++ b/Web/Views/CreateLog/RecentLogs.cshtml @@ -0,0 +1,47 @@ +@using MileageTraker.Web.Models +@using MileageTraker.Web.Utility +@model IEnumerable + +@if (Model.Any()) +{ +

    Recent Logs for @ViewData["employeeName"]

    + + + + + + + + + + @foreach (var log in Model) + { + + + + + + + } +
    + Date + + City + + End ODO + + Type +
    + @Html.Encode(log.Date.ToShortDateString()) + + @Html.Encode(log.CityName) + + @Html.Encode(log.EndOdometer) + + @Html.Encode(log.LogType.Enum.GetDisplayName()) +
    +} +else +{ +

    Mileage history not found for for "@ViewData["employeeName"]"

    +} \ No newline at end of file diff --git a/Web/Views/CreateLog/Success.cshtml b/Web/Views/CreateLog/Success.cshtml new file mode 100644 index 0000000..e53901f --- /dev/null +++ b/Web/Views/CreateLog/Success.cshtml @@ -0,0 +1,29 @@ +@using MileageTraker.Web.Utility +@model MileageTraker.Web.ViewModels.CreateLogViewModel +@{ + + ViewBag.Title = "Success"; + var blackBerry = Request.IsBlackBerry(); + ViewBag.PageStyle = blackBerry ? "~/Content/CreateLog/BlackBerry.css" : "~/Content/CreateLog/Index.css"; + Layout = "~/Views/Shared/_Layout.min.cshtml"; +} + +@if (!blackBerry) { + @:
    + @ViewBag.Title +} +

    + You've successfully created an entry + for @Html.Encode(Model.EmployeeName) + traveling to @Html.Encode(Model.CityName) + on @Html.Encode(Model.Date) + in VehicleId @Html.Encode(Model.VehicleId) +

    +

    + @Html.ActionLink("Create another", "Index", null, new { @class = "ui-button" }) +

    +@if (!blackBerry) +{ + @:
    +} + diff --git a/Web/Views/Home/About.cshtml b/Web/Views/Home/About.cshtml new file mode 100644 index 0000000..986bc06 --- /dev/null +++ b/Web/Views/Home/About.cshtml @@ -0,0 +1,8 @@ +@{ + ViewBag.Title = "About Us"; +} + +

    About

    +

    + Put content here. +

    diff --git a/Web/Views/Log/Create.cshtml b/Web/Views/Log/Create.cshtml new file mode 100644 index 0000000..e73ad3e --- /dev/null +++ b/Web/Views/Log/Create.cshtml @@ -0,0 +1,25 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Create Log"; +} + +

    @ViewBag.Title

    + + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
    + Log + @Html.EditorForModel() +

    + +

    +
    +} + +

    + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

    diff --git a/Web/Views/Log/Delete.cshtml b/Web/Views/Log/Delete.cshtml new file mode 100644 index 0000000..91cb593 --- /dev/null +++ b/Web/Views/Log/Delete.cshtml @@ -0,0 +1,19 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Delete Log"; +} + +

    @ViewBag.Title

    + +

    Are you sure you want to delete this?

    +
    + Log + @Html.DisplayForModel() +
    +@using (Html.BeginForm()) { +

    + + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

    +} diff --git a/Web/Views/Log/Details.cshtml b/Web/Views/Log/Details.cshtml new file mode 100644 index 0000000..b2f0ba1 --- /dev/null +++ b/Web/Views/Log/Details.cshtml @@ -0,0 +1,23 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Log Details"; +} + +

    @ViewBag.Title

    +

    + @Html.ActionLink("Previous", "PreviousDetails", new { id = Model.LogId }, new { @class = "ui-button" }) + @Html.ActionLink("Next", "NextDetails", new { id = Model.LogId }, new { @class = "ui-button" }) + @if(TempData["Message"] != null) { + @TempData["Message"] + } +

    + +
    + Log + @Html.DisplayForModel() +
    +

    + @Html.ActionLink("Edit", "Edit", new { id = Model.LogId }, new { @class = "ui-button" }) + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

    diff --git a/Web/Views/Log/DetailsPartial.cshtml b/Web/Views/Log/DetailsPartial.cshtml new file mode 100644 index 0000000..85b44f4 --- /dev/null +++ b/Web/Views/Log/DetailsPartial.cshtml @@ -0,0 +1,10 @@ +@using MileageTraker.Web.ViewModels +@model LogPartialDetails +@{ + Layout = null; +} +
    Previous Log
    +@Html.DisplayForModel() +

    +@Html.ActionLink("Details", "Details", new { id = Model.LogId }) +

    \ No newline at end of file diff --git a/Web/Views/Log/Edit.cshtml b/Web/Views/Log/Edit.cshtml new file mode 100644 index 0000000..69352b7 --- /dev/null +++ b/Web/Views/Log/Edit.cshtml @@ -0,0 +1,27 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Edit Log"; +} + +

    @ViewBag.Title

    + + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
    + Log + + @Html.EditorForModel() + +

    + +

    +
    +} + +

    + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

    diff --git a/Web/Views/Log/Empty.cshtml b/Web/Views/Log/Empty.cshtml new file mode 100644 index 0000000..0125065 --- /dev/null +++ b/Web/Views/Log/Empty.cshtml @@ -0,0 +1,8 @@ +@{ + ViewBag.Title = "No Logs"; +} + +

    @ViewBag.Title

    +
    + No logs have been added. @Html.ActionLink("Create Log", "Create", null, new { @class = "ui-button" }). +
    \ No newline at end of file diff --git a/Web/Views/Log/Index.cshtml b/Web/Views/Log/Index.cshtml new file mode 100644 index 0000000..655840f --- /dev/null +++ b/Web/Views/Log/Index.cshtml @@ -0,0 +1,56 @@ +@using MileageTraker.Web.Utility +@using MileageTraker.Web.ViewModels +@model LogResultsViewModel + +@{ + ViewBag.Title = "Logs"; + var grid = new WebGrid(Model.Logs, rowsPerPage: 45); +} + +

    @ViewBag.Title

    +@section Styles { + +} + + +

    + @using (Html.BeginForm("Index", "Log", FormMethod.Get, new { id = "filter" })) + { + @Html.EditorForModel() + + } +

    +

    +

    + @Html.ActionLink("Vehicle Mileage", "MonthlyVehicleMileage", new { Year = Model.SelectedYear, Month = Model.SelectedMonth, LogType = Model.SelectedLogType }, new { @class = "ui-button" }) + @Html.ActionLink("Employee Mileage", "MonthlyEmployeeMileage", new { Year = Model.SelectedYear, Month = Model.SelectedMonth, LogType = Model.SelectedLogType }, new { @class = "ui-button" }) + @Html.ActionLink("Add New Log", "Create", null, new { @class = "ui-button" }) + @Html.ActionLink("Export", "Export", new { Year = Model.SelectedYear, Month = Model.SelectedMonth, LogType = Model.SelectedLogType }, new { @class = "ui-button" }) +
    +

    + +
    + @grid.GetHtml(columns: + grid.Columns( + grid.Column("VehicleId", "Vehicle ID", item => Html.ActionLink((string)item.VehicleId, "DetailsPartial", "Vehicle", new { id = item.VehicleId }, new { @class = "qtip-modal" })), + grid.Column("EndOdometer", "End ODO"), + grid.Column("Miles", canSort: false, format: item => + { + if (item.PreviousLogId != null) + { + string miles = (item.EndOdometer - item.PreviousLogEndOdometer).ToString(); + return Html.ActionLink(miles, "DetailsPartial", new { id = item.PreviousLogId }, new { @class = "qtip-modal" }); + } + return Html.Raw("?"); + }), + grid.Column("LogType", "Type", item => ((Enum)item.LogType).GetDisplayShortName()), + grid.Column("GasPurchased", "Gas", item => item.GasPurchased > 0 ? String.Format("{0:0.000}", item.GasPurchased) : string.Empty), + grid.Column("Date", format: item => item.Date.ToString("d")), + grid.Column("CityName", "City Name"), + grid.Column("EmployeeName", "Employee Name"), + grid.Column(format: item => Html.ActionLink("Edit", "Edit", new { id = item.LogId })), + grid.Column(format: item => Html.ActionLink("Details", "Details", new { id = item.LogId })), + grid.Column(format: item => Html.ActionLink("Delete", "Delete", new { id = item.LogId })) + ) + ) +
    diff --git a/Web/Views/Log/LogsSummary.cshtml b/Web/Views/Log/LogsSummary.cshtml new file mode 100644 index 0000000..9a4041c --- /dev/null +++ b/Web/Views/Log/LogsSummary.cshtml @@ -0,0 +1,48 @@ +@using System.Globalization +@using MileageTraker.Web.Models +@model IEnumerable> + +
    + + + @foreach (var log in Model) + { + + + + + + @if (log.Item1 != null) + { + + + } + else + { + + } + + } + + + + + + +
    DateCityEnd ODOStart ODOMiles
    + @Html.Encode(log.Item2.Date.ToShortDateString()) + + @Html.Encode(log.Item2.CityName) + + @Html.ActionLink(log.Item2.EndOdometer.ToString(CultureInfo.InvariantCulture), "Details", "Log", new {id = log.Item2.LogId}, null) + + @Html.ActionLink(log.Item1.EndOdometer.ToString(CultureInfo.InvariantCulture), "Details", "Log", new {id = log.Item1.LogId}, null) + + @(log.Item2.EndOdometer - log.Item1.EndOdometer) + + ? +
    + Total: + @Model.Sum(log => log.Item1 != null ? log.Item2.EndOdometer - log.Item1.EndOdometer : 0) +
    +
    \ No newline at end of file diff --git a/Web/Views/Log/MonthlyEmployeeMileage.cshtml b/Web/Views/Log/MonthlyEmployeeMileage.cshtml new file mode 100644 index 0000000..844f736 --- /dev/null +++ b/Web/Views/Log/MonthlyEmployeeMileage.cshtml @@ -0,0 +1,54 @@ +@model MileageTraker.Web.ViewModels.EmployeeMileageViewModel +@{ + ViewBag.Title = "Employee Mileage Report"; +} +

    @ViewBag.Title

    + + + +

    + @Html.ActionLink("Logs", "Index", "Log", Model.Query, new { @class = "ui-button" }) +

    + @Html.DisplayFor(m => m.Query.Year) + @Html.DisplayFor(m => m.Query.Month) + @if (Model.Query.LogType.HasValue) + { + @Html.DisplayFor(m => m.Query.LogType) + } + + + + + + + + @foreach (var item in Model.Items) + { + + + + + + + } + +
    + Employee + + Trips + + Total Miles + + Total Gas Purchased +
    + @Html.DisplayTextFor(i => item.EmployeeName) + + @Html.DisplayTextFor(i => item.TripCount) + lp.Item1 == null)){ + @:class="ui-state-error" + }> + @Html.DisplayTextFor(i => item.Miles) + @Html.Partial("LogsSummary", item.LogPairs) + + @Html.DisplayTextFor(i => item.GasPurchased) +
    Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased)
    diff --git a/Web/Views/Log/MonthlyVehicleMileage.cshtml b/Web/Views/Log/MonthlyVehicleMileage.cshtml new file mode 100644 index 0000000..5484640 --- /dev/null +++ b/Web/Views/Log/MonthlyVehicleMileage.cshtml @@ -0,0 +1,55 @@ +@using System.Globalization +@model MileageTraker.Web.ViewModels.VehicleMileageViewModel +@{ + ViewBag.Title = "Vehicle Mileage Report"; +} +

    @ViewBag.Title

    + + + +

    + @Html.ActionLink("Logs", "Index", "Log", Model.Query, new { @class = "ui-button" }) +

    + @Html.DisplayFor(m => m.Query.Year) + @Html.DisplayFor(m => m.Query.Month) + @if (Model.Query.LogType.HasValue) + { + @Html.DisplayFor(m => m.Query.LogType) + } + + + + + + + + @foreach (var item in Model.Items) + { + + + + + + + } + +
    + Vehicle Id + + Prog + + Total Miles + + Total Gas Purchased +
    + @Html.ActionLink(item.VehicleId, "Details", "Vehicle", new { id = item.VehicleId }, null) + + @Html.DisplayTextFor(i => item.Prog) + lp.Item1 == null)){ + @:class="ui-state-error" + }> + @Html.DisplayTextFor(i => item.Miles) + @Html.Partial("LogsSummary", item.LogPairs) + + @Html.DisplayTextFor(i => item.GasPurchased) +
    Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased)
    diff --git a/Web/Views/Shared/DisplayTemplates/DateTime.cshtml b/Web/Views/Shared/DisplayTemplates/DateTime.cshtml new file mode 100644 index 0000000..2d05905 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/DateTime.cshtml @@ -0,0 +1,5 @@ +@model DateTime +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(string.Format(ViewData.ModelMetadata.DisplayFormatString, Model)) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/Decimal.cshtml b/Web/Views/Shared/DisplayTemplates/Decimal.cshtml new file mode 100644 index 0000000..e067346 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/Decimal.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/HiddenInput.cshtml b/Web/Views/Shared/DisplayTemplates/HiddenInput.cshtml new file mode 100644 index 0000000..e067346 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/HiddenInput.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/MileageLogTypeWrapper.cshtml b/Web/Views/Shared/DisplayTemplates/MileageLogTypeWrapper.cshtml new file mode 100644 index 0000000..6dad5a3 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/MileageLogTypeWrapper.cshtml @@ -0,0 +1,7 @@ +@using MileageTraker.Web.Models +@using MileageTraker.Web.Utility +@model MileageLogTypeWrapper +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model.Enum.GetDisplayName()) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/Object.cshtml b/Web/Views/Shared/DisplayTemplates/Object.cshtml new file mode 100644 index 0000000..b8d84ef --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/Object.cshtml @@ -0,0 +1,8 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; +} +@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !pm.HideSurroundingHtml && !pm.ModelType.IsCollection())) +{ + @Html.Display(prop.PropertyName) +} \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/String.cshtml b/Web/Views/Shared/DisplayTemplates/String.cshtml new file mode 100644 index 0000000..e067346 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/String.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/_FieldLayout.cshtml b/Web/Views/Shared/DisplayTemplates/_FieldLayout.cshtml new file mode 100644 index 0000000..5bffb71 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/_FieldLayout.cshtml @@ -0,0 +1,20 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; + var lowerPropertyName = @CustomExtensions.LowercaseFirst(ViewData.ModelMetadata.PropertyName); + var units = (string)ViewData.ModelMetadata.AdditionalValues["Units"]; + var color = ViewData.ModelMetadata.PropertyName == "Color" ? Model : ""; +} + +
    +
    + @Html.LabelForModel() +
    +
    + @RenderBody() + @if (!string.IsNullOrEmpty(units)) + { + @units + } +
    +
    \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/DateTime.cshtml b/Web/Views/Shared/EditorTemplates/DateTime.cshtml new file mode 100644 index 0000000..eedfc77 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/DateTime.cshtml @@ -0,0 +1,5 @@ +@model DateTime +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@Html.TextBox("", (Model != DateTime.MinValue ? Model.ToShortDateString() : string.Empty )) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Decimal.cshtml b/Web/Views/Shared/EditorTemplates/Decimal.cshtml new file mode 100644 index 0000000..91e51be --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Decimal.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Enum.cshtml b/Web/Views/Shared/EditorTemplates/Enum.cshtml new file mode 100644 index 0000000..68a1dd6 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Enum.cshtml @@ -0,0 +1,18 @@ +@using MileageTraker.Web.Utility +@model Enum +@{ + var listItems = Model.GetSelectListItems(); + var prefix = ViewData.TemplateInfo.HtmlFieldPrefix; + ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty; + var index = 0; + + foreach (var li in listItems) + { + var fieldName = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}_{1}", prefix.Replace('.', '_'), index++); + + @Html.RadioButton(prefix, li.Value, li.Selected, new { @id = fieldName }) + @Html.Label(fieldName, li.Text) + + } + ViewData.TemplateInfo.HtmlFieldPrefix = prefix; +} \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Enum_Select.cshtml b/Web/Views/Shared/EditorTemplates/Enum_Select.cshtml new file mode 100644 index 0000000..49dfc43 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Enum_Select.cshtml @@ -0,0 +1,7 @@ +@using MileageTraker.Web.Utility +@model Enum +@{ + var emptyItem = new SelectListItem{Text="Type", Value=""}; + var listItems = new []{emptyItem}.Concat(Model.GetSelectListItems()); + @Html.ListBox("", listItems) +} diff --git a/Web/Views/Shared/EditorTemplates/HiddenInput.cshtml b/Web/Views/Shared/EditorTemplates/HiddenInput.cshtml new file mode 100644 index 0000000..419abec --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/HiddenInput.cshtml @@ -0,0 +1 @@ +@Html.Hidden("", ViewData.TemplateInfo.FormattedModelValue) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/LogResultsViewModel.cshtml b/Web/Views/Shared/EditorTemplates/LogResultsViewModel.cshtml new file mode 100644 index 0000000..9424b14 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/LogResultsViewModel.cshtml @@ -0,0 +1,7 @@ +@using MileageTraker.Web.Models +@using MileageTraker.Web.Utility +@model MileageTraker.Web.ViewModels.LogResultsViewModel + +@Html.DropDownList("Year", new SelectList(Model.Years, Model.SelectedYear)) +@Html.DropDownList("Month", new SelectList(Model.Months, Model.SelectedMonth)) +@Html.DropDownList("LogType", typeof(MileageLogType).ToSelectList(Model.SelectedLogType, "Log Type")) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/MileageLogTypeWrapper.cshtml b/Web/Views/Shared/EditorTemplates/MileageLogTypeWrapper.cshtml new file mode 100644 index 0000000..ad729a7 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/MileageLogTypeWrapper.cshtml @@ -0,0 +1,6 @@ +@using MileageTraker.Web.Models +@model MileageLogTypeWrapper +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@Html.EditorFor(model => model.Enum, "Enum") \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Object.cshtml b/Web/Views/Shared/EditorTemplates/Object.cshtml new file mode 100644 index 0000000..e4b42a3 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Object.cshtml @@ -0,0 +1,8 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; +} +@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.ModelType.IsCollection())) +{ + @Html.Editor(prop.PropertyName) +} \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/String.cshtml b/Web/Views/Shared/EditorTemplates/String.cshtml new file mode 100644 index 0000000..5807540 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/String.cshtml @@ -0,0 +1,11 @@ +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@if (!(Model is Enum)) +{ + @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue) +} +else +{ + @Html.Editor("", "Enum") +} \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/_FieldLayout.cshtml b/Web/Views/Shared/EditorTemplates/_FieldLayout.cshtml new file mode 100644 index 0000000..2131789 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/_FieldLayout.cshtml @@ -0,0 +1,26 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; + var lowerPropertyName = @CustomExtensions.LowercaseFirst(ViewData.ModelMetadata.PropertyName); + var units = (string)ViewData.ModelMetadata.AdditionalValues["Units"]; + var formatHint = (string)ViewData.ModelMetadata.AdditionalValues["FormatHint"]; + var editLabel = (bool)ViewData.ModelMetadata.AdditionalValues["EditLabel"]; +} + +
    + @if (editLabel) { +
    + @Html.LabelForModel() +
    + } +
    + @RenderBody() + @if (!string.IsNullOrEmpty(units)) { + @units + } + @if (!string.IsNullOrEmpty(formatHint)) { +
    @formatHint
    + } + @Html.ValidationMessage("") +
    +
    diff --git a/Web/Views/Shared/Error.cshtml b/Web/Views/Shared/Error.cshtml new file mode 100644 index 0000000..d3bcd71 --- /dev/null +++ b/Web/Views/Shared/Error.cshtml @@ -0,0 +1,13 @@ +@model HandleErrorInfo + +@{ + ViewBag.Title = "Error"; + if (Model.ControllerName == "CreateLog") + { + Layout = "~/Views/Shared/_Layout.min.cshtml"; + } +} + +

    + Sorry, an error occurred while processing your request. +

    diff --git a/Web/Views/Shared/_Layout.cshtml b/Web/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..b62ce80 --- /dev/null +++ b/Web/Views/Shared/_Layout.cshtml @@ -0,0 +1,36 @@ + + + + Mileage Traker - ETHRA - @ViewBag.Title + + + @RenderSection("Styles", false) + + + + + + +
    + +
    + @RenderBody() +
    + +
    + + diff --git a/Web/Views/Shared/_Layout.min.cshtml b/Web/Views/Shared/_Layout.min.cshtml new file mode 100644 index 0000000..de748ce --- /dev/null +++ b/Web/Views/Shared/_Layout.min.cshtml @@ -0,0 +1,38 @@ +@using MileageTraker.Web.Utility + + + + Mileage Traker - ETHRA - @ViewBag.Title + + + @if (Request.IsBlackBerry()) + { + + } + else + { + + } + @if (ViewBag.PageStyle != null) + { + + } + + + @if (!Request.IsBlackBerry()) + { + + + } + + + + @if (!Request.IsBlackBerry()) + { + + } + @RenderBody() + + diff --git a/Web/Views/Vehicle/Create.cshtml b/Web/Views/Vehicle/Create.cshtml new file mode 100644 index 0000000..e538d78 --- /dev/null +++ b/Web/Views/Vehicle/Create.cshtml @@ -0,0 +1,26 @@ +@model MileageTraker.Web.Models.Vehicle + +@{ + ViewBag.Title = "Create Vehicle"; +} + +

    @ViewBag.Title

    + + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
    + Vehicle + @Html.EditorForModel() + +

    + +

    +
    +} + +

    + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

    diff --git a/Web/Views/Vehicle/Details.cshtml b/Web/Views/Vehicle/Details.cshtml new file mode 100644 index 0000000..2caf211 --- /dev/null +++ b/Web/Views/Vehicle/Details.cshtml @@ -0,0 +1,20 @@ +@model MileageTraker.Web.Models.Vehicle + +@{ + ViewBag.Title = "Vehicle Details"; +} + +@section Styles { + +} + +

    @ViewBag.Title

    + +
    + Vehicle + @Html.DisplayForModel() +
    +

    + @Html.ActionLink("Edit", "Edit", new { id = Model.VehicleId }, new { @class = "ui-button" }) + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

    diff --git a/Web/Views/Vehicle/DetailsPartial.cshtml b/Web/Views/Vehicle/DetailsPartial.cshtml new file mode 100644 index 0000000..e7f1dbd --- /dev/null +++ b/Web/Views/Vehicle/DetailsPartial.cshtml @@ -0,0 +1,8 @@ +@model MileageTraker.Web.ViewModels.VehiclePartialDetails +@{ + Layout = null; +} +@Html.DisplayForModel() +

    +@Html.ActionLink("Details", "Details", new { id = Model.VehicleId }) +

    \ No newline at end of file diff --git a/Web/Views/Vehicle/Edit.cshtml b/Web/Views/Vehicle/Edit.cshtml new file mode 100644 index 0000000..ca2ca3c --- /dev/null +++ b/Web/Views/Vehicle/Edit.cshtml @@ -0,0 +1,26 @@ +@model MileageTraker.Web.Models.Vehicle + +@{ + ViewBag.Title = "Edit Vehicle"; +} + +

    @ViewBag.Title

    + + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
    + Vehicle + @Html.EditorForModel() + +

    + +

    +
    +} + +

    + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

    diff --git a/Web/Views/Vehicle/Index.cshtml b/Web/Views/Vehicle/Index.cshtml new file mode 100644 index 0000000..7b79979 --- /dev/null +++ b/Web/Views/Vehicle/Index.cshtml @@ -0,0 +1,94 @@ +@model IEnumerable + +@{ + ViewBag.Title = "Vehicles"; +} + +@section Styles { + +} + +

    @ViewBag.Title

    + +

    + @Html.ActionLink("Add another vehicle", "Create", null, new{@class="ui-button"}) + @Html.ActionLink("Export", "Export", null, new { @class = "ui-button" }) +

    + + + + + + + + + + + + + + + +@foreach (var item in Model) { + + + + + + + + + + + + + + + +} + +
    + Key + + EthraId + + Model Yr + + Make + + Model + + Type + + TagNumber + + Prog + + Assigned + + ODO +
    + @Html.DisplayTextFor(m => item.Key) + + @Html.DisplayTextFor(m => item.VehicleId) + + @Html.DisplayTextFor(m => item.ModelYear) + + @Html.DisplayTextFor(m => item.Make) + + @Html.DisplayTextFor(m => item.CarModel) + + @Html.DisplayTextFor(m => item.Type) + + @Html.DisplayTextFor(m => item.TagNumber) + + @Html.DisplayTextFor(m => item.Prog) + + @Html.DisplayTextFor(m => item.Assigned) @if(!string.IsNullOrEmpty(item.Notes)) { + @Html.DisplayTextFor(m => item.Notes) + } + + @Html.DisplayTextFor(m => item.CurrentOdometer) + + @Html.ActionLink("Edit", "Edit", new { id=item.VehicleId }) @Html.ActionLink("Details", "Details", new { id=item.VehicleId }) @Html.ActionLink("New log", "Create", "Log", new { vehicleId = item.VehicleId }, null) +
    diff --git a/Web/Views/Web.config b/Web/Views/Web.config new file mode 100644 index 0000000..a4def2a --- /dev/null +++ b/Web/Views/Web.config @@ -0,0 +1,58 @@ + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Web/Views/_ViewStart.cshtml b/Web/Views/_ViewStart.cshtml new file mode 100644 index 0000000..efda124 --- /dev/null +++ b/Web/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Views/Shared/_Layout.cshtml"; +} \ No newline at end of file diff --git a/Web/Web.Debug.config b/Web/Web.Debug.config new file mode 100644 index 0000000..2c6dd51 --- /dev/null +++ b/Web/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.Publish.xml b/Web/Web.Publish.xml new file mode 100644 index 0000000..acff0c4 --- /dev/null +++ b/Web/Web.Publish.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.Release.config b/Web/Web.Release.config new file mode 100644 index 0000000..4122d79 --- /dev/null +++ b/Web/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.config b/Web/Web.config new file mode 100644 index 0000000..6e852da --- /dev/null +++ b/Web/Web.config @@ -0,0 +1,72 @@ + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.csproj b/Web/Web.csproj new file mode 100644 index 0000000..985b465 --- /dev/null +++ b/Web/Web.csproj @@ -0,0 +1,397 @@ + + + + + Debug + AnyCPU + + + 2.0 + {36D4C321-E918-460F-B348-16A805F88884} + {E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + MileageTraker.Web + MileageTraker + v4.0 + false + false + + + + + 4.0 + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + False + ..\packages\AutoMapper.2.1.267\lib\net40\AutoMapper.dll + + + False + ..\packages\EntityFramework.4.3.1\lib\net40\EntityFramework.dll + + + ..\packages\ExcelLibrary.1.2011.7.30\lib\ExcelLibrary.dll + + + False + ..\packages\log4net.2.0.0\lib\net40-full\log4net.dll + + + + ..\packages\morelinq.1.0\lib\net35\MoreLinq.dll + + + + + + + + + + + + + + True + + + + + + + + + + 201204181847082_InitialMigration.cs + + + + + + + + + + + + + + + + + + + + + + + Global.asax + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + Web.config + + + Web.config + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + + + + False + True + 2977 + / + + + False + False + + + False + + + + + \ No newline at end of file diff --git a/Web/favicon.ico b/Web/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8f0c56fe81210f5bf215b75c8c66d512c2a184e6 GIT binary patch literal 3605 zcma)9TWnlc6&<69hlE5`J}5sZUsb7yh)_@pRT4fxv}pi=fQApgsz?Y4DOC}uAmpG( zX#s`iQQ9O`nx;zAyc|1r?1^j7wLPAv$Mb%8UU%LPKW66MJGSFTl3A>C#&%;TRE)HI zXU;i$oqhJ%cdu=esl)U+(-Tja_}Omy-8PfyX?}a^srK(TzhpA~n`6)Lr&zL`=#YQ; z<%`6YPqkV-VzF41Teog04u?Z&G#banlKc1XzqYuzs0ggAtSA6>5??743d+F1fLuQ~ zIH(-4sLQ{;9KgYk{J7EEkC~Yn2zy=EVYAslZuzX&>o_w}e)+dIqWBfpzWh-Dm-_~> z_uORb*?(H`+<#oSzGm;vH~##G?hp=r?2)*9{U)ZSrZB43uIxECfnBGa*mKTtqAMr2z-fjODkuf zS2MU{Hltc8!zibq=VQ=wQ6eUP_w;ll5(>a5CfeiWB*sP*G>gfWo(@A-L$n`2Rh@#C z3_zQjL_;9qlXH%dVK}U#&{IKZax9E7#e!xg*wPbDj=5>yk6OwLEpDg19fha|^|%Xq z(v4im3CmzV=eU;hdfFrHjf}UY#ckZn2B&p|b2i$J(+8*YPp_!lQ*bz89~tDFRYFg@ zX+I1jGuaaB8__XTVlHU0G08EL@WAi)V|8U^%1|feSV_!Bxd+#5wztxLL_&*>@+@{_ zqh6HDWu_dy)-1)OeIquCMnoY8Z{r@RR4z(-Sg&&78j_Y-G%NFNW$xHkA~(D9x(+;r#skFBrG&58JOaXO0{BV0&%Or_7fVicz0^_47MTrfn<~EE%8u zIl^h8WAsyeVXR$eMCl>Tr*-B@{@C)-G;Mn}o9$#h=vna{Bz$ zd-v{j^6VQ}T3YJlJ^Xx~&M=I_ey_LFY&LhYW=ROno>=u_e<+6wLlZc2dmI;ghrs%T zTrP*Zckdn+_T)Y*>Qb>-l;dJf+!Obk=H3T~()B}1a#p|YjNv`AeS@ceU;w|rooxN& zQV1_z^y4MsSl=vE!SSIm-ni|-G2;C7Ufj5G z1EEj|jPL1xjjA8-|Gpf7XLPbxlbAmo9i(&;DZsPajk8?c-J)?Qw1L|HQaz z`@vZ^_O4+cpMUGJtqutI8{<^Wy^U5`UX5YJZ?0v`1x@?zq`S49IE?>DS5(Y9?E&=l_v2^pJ6q44P_X+g1<#)vA-{ctzf{xE?M>sFJC0s&0%l(vN+^NJL>d!r zC%U@2WG$-A&7fK1eY188+^v^TP~(#4=s=)#)fIy^l0qn@A`}j7@EeUeG^#mh)hzT% z8is_5=5!V_B~`{~Y;27BkVkVS$N7{*b2@`;GD@C)Oqa7QgSB)WnRr<8XLxR7rU;$7 zpiwilY-A18jsmryl!BS|{ft3A9fw{@LeEC!8od}tR`T?tS;@47)`&Ur%tV82{v>S* zNoZ;6M$*sv50T#qU5pcgf7J4c)Hy9qy_2w^8neUgbfBySylaq{1jk%a-{KXllcZJ|MGW4k)Be&2{+C9ooouEF6 zd6oRLjD=h)#>gQwCCIx>rBb4%dFLxBO~gmc%~5;GF(>NO>9z)MLEYpxTZ!w>QbMD#y^H%tP>h4wOZj*Xu05L zY}jLDVm^4i%+E&SHtX@%R~Hv|=~3_{`7wn|9U?_esSmYbHp-) zOeP~@b8cNv=4T7gxVP|M_#^e5d;Bkc*{7`a3c?pnXgU3uVV;T_z&g3~;K75xuk)`g z&BtVn=!5iM^bh|xKjS0vfOi=7IuHm1&}=pX>)hhWIBk>t(U!A6;(s9|oF4dChnJU+sOYS-(QhyqQ?>al*nNbcjjb;{cM!= zRA?_h-`e7T$5OrgijfobNxUy2|Cw*H7vg&!_hWqA3ZAj0XV}~FeUbOf^9pW*`BAUr zBsX(%Q_r=&&)xdW_vWi<)-%>4ao5~O^iu4Xps^;`YIE$-V~UXv5$uuJM;Up6kg`xo zDhsvpkJh;!_heu3!{tVKi#>U0zgRCTFpMX8Zd1pRQ9|@dZ9I + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/AutoMapper.2.1.267/AutoMapper.2.1.267.nupkg b/packages/AutoMapper.2.1.267/AutoMapper.2.1.267.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..d3510e22233c6b3538eb35b2dd70618530855ab6 GIT binary patch literal 174584 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%0DLW=a> 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 NL(xAI^8X + + + AutoMapper + + + +

    + This expression visitor will replace an input parameter by another one + + see http://stackoverflow.com/questions/4601844/expression-tree-copy-or-convert + + + + diff --git a/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.XML b/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.XML new file mode 100644 index 0000000..3b6bdcc --- /dev/null +++ b/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.XML @@ -0,0 +1,671 @@ + + + + AutoMapper + + + + + This expression visitor will replace an input parameter by another one + + see http://stackoverflow.com/questions/4601844/expression-tree-copy-or-convert + + + + + Search key structure for + + Type of the key. + Type of the value. + + + + A Concurrent implementation. + + Type of the keys. + Type of the values. + + This class is threadsafe and highly concurrent. This means that multiple threads can do lookup and insert operations + on this dictionary simultaneously. + It is not guaranteed that collisions will not occur. The dictionary is partitioned in segments. A segment contains + a set of items based on a hash of those items. The more segments there are and the beter the hash, the fewer collisions will occur. + This means that a nearly empty ConcurrentDictionary is not as concurrent as one containing many items. + + + + + Base class for concurrent hashtable implementations + + Type of the items stored in the hashtable. + Type of the key to search with. + + + + Constructor (protected) + + Use Initialize method after construction. + + + + Initialize the newly created ConcurrentHashtable. Invoke in final (sealed) constructor + or Create method. + + + + + Create a segment range + + Number of segments in range. + Number of slots allocated initialy in each segment. + The created instance. + + + + While adjusting the segmentation, _NewRange will hold a reference to the new range of segments. + when the adjustment is complete this reference will be copied to _CurrentRange. + + + + + Will hold the most current reange of segments. When busy adjusting the segmentation, this + field will hold a reference to the old range. + + + + + While adjusting the segmentation this field will hold a boundary. + Clients accessing items with a key hash value below this boundary (unsigned compared) + will access _NewRange. The others will access _CurrentRange + + + + + Get a hashcode for given storeable item. + + Reference to the item to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Get a hashcode for given search key. + + Reference to the key to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Compares a storeable item to a search key. Should return true if they match. + + Reference to the storeable item to compare. + Reference to the search key to compare. + True if the storeable item and search key match; false otherwise. + + + + Compares two storeable items for equality. + + Reference to the first storeable item to compare. + Reference to the second storeable item to compare. + True if the two soreable items should be regarded as equal. + + + + Indicates if a specific item reference contains a valid item. + + The storeable item reference to check. + True if the reference doesn't refer to a valid item; false otherwise. + The statement IsEmpty(default(TStoredI)) should always be true. + + + + Returns the type of the key value or object. + + The stored item to get the type of the key for. + The actual type of the key or null if it can not be determined. + + Used for diagnostics purposes. + + + + + Gets a segment out of either _NewRange or _CurrentRange based on the hash value. + + + + + + + Gets a LOCKED segment out of either _NewRange or _CurrentRange based on the hash value. + Unlock needs to be called on this segment before it can be used by other clients. + + + + + + + Gets a LOCKED segment out of either _NewRange or _CurrentRange based on the hash value. + Unlock needs to be called on this segment before it can be used by other clients. + + + + + + + Finds an item in the table collection that maches the given searchKey + + The key to the item. + Out reference to a field that will receive the found item. + A boolean that will be true if an item has been found and false otherwise. + + + + Looks for an existing item in the table contents using an alternative copy. If it can be found it will be returned. + If not then the alternative copy will be added to the table contents and the alternative copy will be returned. + + A copy to search an already existing instance with + Out reference to receive the found item or the alternative copy + A boolean that will be true if an existing copy was found and false otherwise. + + + + Replaces and existing item + + + + + true is the existing item was successfully replaced. + + + + Inserts an item in the table contents possibly replacing an existing item. + + The item to insert in the table + Out reference to a field that will receive any possibly replaced item. + A boolean that will be true if an existing copy was found and replaced and false otherwise. + + + + Removes an item from the table contents. + + The key to find the item with. + Out reference to a field that will receive the found and removed item. + A boolean that will be rue if an item was found and removed and false otherwise. + + + + Enumerates all segments in _CurrentRange and locking them before yielding them and resleasing the lock afterwards + The order in which the segments are returned is undefined. + Lock SyncRoot before using this enumerable. + + + + + + Removes all items from the collection. + Aquires a lock on SyncRoot before it does it's thing. + When this method returns and multiple threads have access to this table it + is not guaranteed that the table is actually empty. + + + + + Determines if a segmentation adjustment is needed. + + True + + + + Bool as int (for interlocked functions) that is true if a Segmentation assesment is pending. + + + + + The total allocated number of item slots. Filled with nonempty items or not. + + + + + When a segment resizes it uses this method to inform the hashtable of the change in allocated space. + + + + + + Schedule a call to the AssessSegmentation() method. + + + + + Checks if segmentation needs to be adjusted and if so performs the adjustment. + + + + + + This method is called when a re-segmentation is expected to be needed. It checks if it actually is needed and, if so, performs the re-segementation. + + + + + Adjusts the segmentation to the new segment count + + The new number of segments to use. This must be a power of 2. + The number of item slots to reserve in each segment. + + + + Returns an object that serves as a lock for range operations + + + Clients use this primarily for enumerating over the Tables contents. + Locking doesn't guarantee that the contents don't change, but prevents operations that would + disrupt the enumeration process. + Operations that use this lock: + Count, Clear, DisposeGarbage and AssessSegmentation. + Keeping this lock will prevent the table from re-segmenting. + + + + + Gets an IEnumerable to iterate over all items in all segments. + + + + A lock should be aquired and held on SyncRoot while this IEnumerable is being used. + The order in which the items are returned is undetermined. + + + + + Returns a count of all items in teh collection. This may not be + aqurate when multiple threads are accessing this table. + Aquires a lock on SyncRoot before it does it's thing. + + + + + Gives the minimum number of segments a hashtable can contain. This should be 1 or more and always a power of 2. + + + + + Gives the minimum number of allocated item slots per segment. This should be 1 or more, always a power of 2 + and less than 1/2 of MeanSegmentAllocatedSpace. + + + + + Gives the prefered number of allocated item slots per segment. This should be 4 or more and always a power of 2. + + + + + Constructs a instance using the default to compare keys. + + + + + Constructs a instance using the specified to compare keys. + + The tp compare keys with. + is null. + + + + Get a hashcode for given storeable item. + + Reference to the item to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Get a hashcode for given search key. + + Reference to the key to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Compares a storeable item to a search key. Should return true if they match. + + Reference to the storeable item to compare. + Reference to the search key to compare. + True if the storeable item and search key match; false otherwise. + + + + Compares two storeable items for equality. + + Reference to the first storeable item to compare. + Reference to the second storeable item to compare. + True if the two soreable items should be regarded as equal. + + + + Indicates if a specific item reference contains a valid item. + + The storeable item reference to check. + True if the reference doesn't refer to a valid item; false otherwise. + The statement IsEmpty(default(TStoredI)) should always be true. + + + + Adds an element with the provided key and value to the dictionary. + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + An element with the same key already exists in the dictionary. + + + + Determines whether the dictionary + contains an element with the specified key. + + The key to locate in the dictionary. + true if the dictionary contains + an element with the key; otherwise, false. + + + + Removes the element with the specified key from the dictionary. + + The key of the element to remove. + true if the element is successfully removed; otherwise, false. This method + also returns false if key was not found in the original dictionary. + + + + Gets the value associated with the specified key. + + The key whose value to get. + + When this method returns, the value associated with the specified key, if + the key is found; otherwise, the default value for the type of the value + parameter. This parameter is passed uninitialized. + + + true if the dictionary contains an element with the specified key; otherwise, false. + + + + + Adds an association to the dictionary. + + A that represents the association to add. + An association with an equal key already exists in the dicitonary. + + + + Removes all items from the dictionary. + + WHen working with multiple threads, that each can add items to this dictionary, it is not guaranteed that the dictionary will be empty when this method returns. + + + + Determines whether the specified association exists in the dictionary. + + The key-value association to search fo in the dicionary. + True if item is found in the dictionary; otherwise, false. + + This method compares both key and value. It uses the default equality comparer to compare values. + + + + + Copies all associations of the dictionary to an + , starting at a particular index. + + The one-dimensional that is the destination of the associations + copied from . The must + have zero-based indexing. + The zero-based index in at which copying begins. + is null. + is less than 0. + is equal to or greater than the length of . + The number of associations to be copied + is greater than the available space from to the end of the destination + . + + + + Removes the specified association from the , comparing both key and value. + + A representing the association to remove. + true if the association was successfully removed from the ; + otherwise, false. This method also returns false if the association is not found in + the original . + + + + + Returns an enumerator that iterates through all associations in the at the moment of invocation. + + A that can be used to iterate through the associations. + + + + Returns an enumerator that iterates through all associations in the at the moment of invocation. + + A that can be used to iterate through the associations. + + + + Gives the of TKey that is used to compare keys. + + + + + Gets an containing the keys of + the dictionary. + + An containing the keys of the dictionary. + This property takes a snapshot of the current keys collection of the dictionary at the moment of invocation. + + + + Gets an containing the values in + the dictionary. + + + An containing the values in the dictionary. + + This property takes a snapshot of the current keys collection of the dictionary at the moment of invocation. + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get operation throws a KeyNotFoundException, and a set operation creates a new element with the specified key. + + When working with multiple threads, that can each potentialy remove the searched for item, a can always be expected. + + + + + Gets the number of elements contained in the . + + + + + Gets a value indicating whether the is read-only, which is always false. + + + + + A 'single writer - multi reader' threaded segment in a hashtable. + + + + + Though each segment can be accessed by 1 writer thread simultaneously, the hashtable becomes concurrent + for writing by containing many segments so that collisions are rare. The table will be fully concurrent + for read operations as far as they are not colliding with write operations. + Each segment is itself a small hashtable that can grow and shrink individualy. This prevents blocking of + the entire hashtable when growing or shrinking is needed. Because each segment is relatively small (depending on + the quality of the hash) resizing of the individual segments should not take much time. + + + + + Initialize the segment. + + + + + + When segment gets introduced into hashtable then its allocated space should be added to the + total allocated space. + Single threaded access or locking is needed + + + + + + When segment gets removed from hashtable then its allocated space should be subtracted to the + total allocated space. + Single threaded access or locking is needed + + + + + + Array with 'slots'. Each slot can be filled or empty. + + + + + Inserts an item into a *not empty* spot given by position i. It moves items forward until an empty spot is found. + + + + + + + + + Find item in segment. + + Reference to the search key to use. + Out reference to store the found item in. + Object that tells this segment how to treat items and keys. + True if an item could be found, otherwise false. + + + + Find an existing item or, if it can't be found, insert a new item. + + Reference to the item that will be inserted if an existing item can't be found. It will also be used to search with. + Out reference to store the found item or, if it can not be found, the new inserted item. + Object that tells this segment how to treat items and keys. + True if an existing item could be found, otherwise false. + + + + Inserts an item in the segment, possibly replacing an equal existing item. + + A reference to the item to insert. + An out reference where any replaced item will be written to, if no item was replaced the new item will be written to this reference. + Object that tells this segment how to treat items and keys. + True if an existing item could be found and is replaced, otherwise false. + + + + Removes an item from the segment. + + A reference to the key to search with. + An out reference where the removed item will be stored or default() if no item to remove can be found. + Object that tells this segment how to treat items and keys. + True if an item could be found and is removed, false otherwise. + + + + Iterate over items in the segment. + + Position beyond which the next filled slot will be found and the item in that slot returned. (Starting with -1) + Out reference where the next item will be stored or default if the end of the segment is reached. + Object that tells this segment how to treat items and keys. + The index position the next item has been found or -1 otherwise. + + + + Total numer of filled slots in _List. + + + + + Remove any excess allocated space + + + + + + Boolean value indicating if this segment has not been trashed yet. + + + + + Tiny spin lock that allows multiple readers simultanously and 1 writer exclusively + + + + + Release a reader lock + + + + + Release a writer lock + + + + + Aquire a reader lock. Wait until lock is aquired. + + + + + Aquire a reader lock. + + True if to wait until lock aquired, False to return immediately. + Boolean indicating if lock was successfuly aquired. + + + + Aquire a writer lock. Wait until lock is aquired. + + + + + Aquire a writer lock. + + True if to wait until lock aquired, False to return immediately. + Boolean indicating if lock was successfuly aquired. + + + + Attempts to replicate the Desktop CLR. + + + + diff --git a/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.dll b/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.dll new file mode 100644 index 0000000000000000000000000000000000000000..c9d814f1761a258da0a69af8d5ea9eb34c1e4d1c GIT binary patch literal 164352 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%0DT-$hTRcOs#WR2v|Ljs7Ivcdbvw=m2VAnSqV31Fw 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 + + + + diff --git a/packages/EntityFramework.4.3.1/Content/Web.config.transform b/packages/EntityFramework.4.3.1/Content/Web.config.transform new file mode 100644 index 0000000..4fa1b95 --- /dev/null +++ b/packages/EntityFramework.4.3.1/Content/Web.config.transform @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/EntityFramework.4.3.1/EntityFramework.4.3.1.nupkg b/packages/EntityFramework.4.3.1/EntityFramework.4.3.1.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..d6a86e13040433acd54c2eb582d423a60fe11dbc GIT binary patch literal 693778 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

    XaC?%n9}a3FQ0f1%!a>^5Cry9 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

    yh>nWxPgjO@HaT zmQBS9gErYk0PoR?xa9qGo$#L(fFFZGqq$N{* zx3{^we*$qb|2SEUF@51|JE3p$&ZQKN>AlJ&PpmexOUF$7hXk2C!)_R9f6I}BdNXlp zd}|_eEWP8yy_XIW;YS!ijqX%4)#tt2HCdLOy9;aK_aAA~FkNM`F9cRMJ9D>|FAo7% zCe?%lS^Tn@aF^;Sm)b24`DSy^FeMrhv9xZU@^_>&7ZT0DRwwM0d3og}NCz@(iGJf# zqT;?urq_K z+-*K1=P@6mb@&6%A~r&*IZDN5)vuxe4O2Zoc)V&U_MNUF8hf6W=jvd?){BdEe_SUf zq`XB~tSHSaag=#iUB?|wVNeGe_nBEK*-f#EU4`^+u5jN}kzuRES6=?$ z=%i+}@#$UCi3>yh!1Yt!VMtHZgdm)}#g#pyLXI^Rn9|cps`H(vJX?!5%t&H;^zzUH zTbm?LoPp9)bPeF{$*D47S266~c7m-k`qji<2)}0RpvRFz0-J95)*KY5WQ&bwzK$-Z z-gmcRdP~^f_NF3X4O`1+6BbxkarDl73=~8##4y zOGiE~;kSKggd&nv{^qv_-D}X1uTamwJwRc-N9zCkOD{_>-JP=tNHGa>*9E&ueTOd@ zGdXg*Yxn8km94djlsf4mm&I55&`&i&($*Y}!G>6=Z(zr3lB@2|!4MXC&%x~I7LtcO zK~SZ!W`+xN+uox^z^EZ|&(i;nlUR%)IoH*dsr7h;!9x5C+h$prFam#gCjr;Mt_&p# z1NP>w|HJoQ(D)qoht2#wWGoUG1s>c^eq4WV#!HN_+prQ19B+n&=r~ohjWB%6D77Y* z!}pzf3hql(lvP!XK~UnA#tZikXL3gSLx*mU>z-Elh;E^()=C8ncLS3i9qF9A>dyef zb19W}y`5v`cO~>^4+uO__l*;3QTyhNZ+zE0v3<}llnUHUP6!Oi={ZkTYLP;`FN*gat(e5*E(Dhf=iPXZn}kCK0$B;tp*%Ax)|aM!J8q_~c$a{{_H zGhR@J(?!f6-Qot{c{0c+Eu4oH;Xc}nFwa3Kp2Hrj@LlUp>P)WUvHfuT3YmmmJ!;I` z!8&<|a6)g{nqh9@NO}9B?q=Z%E2xpL^FQyIbLm0|o3pgw@~hh>nzHJg1)uLBKS}i(8 zOd4;@-7qG4z+M`3tb@Dq$oJ{CzM7Zb7mFmg-A`TH8Qt`{(M{YLBe3Qx7v%=jlE~Z{ z^qSN{-hgEMD;$V1pm3REpGh*V`cTDcaN-;*zPp@h;U%Z*31J|*XFf1ySxMo#*k(RN zeJt{m03+CBe*?ZW0FCj^og9d7t!9(^j%`6rTD~cFi5e|Z*I5*|VO`9%R{JD0Bhq6@ z4WYgE@qLcXMa+1-w%=(lXOr&U>N|OZPCD56BBIoD&?V*3^d@$HU z-_sCS56)yCB!BT7Z^-ykOBF$sc`O;py5rHJ$8i_T)fu)fF2?gqiGhp9I0ej@W6wr3 z*v{5EoD1mb3r=h4D0AnJU18D(30eGQD=aL| z$xj@g$V(WFQfAU2UjII-F})o*loK0=&ZLOh*>PBur)+lu?@2o&gh~I$Yj^$~hu&5e zL^i|Shxc)Gt!5pMB^=Q-*~?48Oj?tW@qMgNFII{ri5vJqncf z*a7uPzE;}xgTe*MSI|MJ18(2B=~nby<K+{(^QJ+F1>yq1q_r@Amzvr%ZBJd4v&6n!`JK)RiKY5ASR$M{`-9pg~kc z`Q+yZI+mQ=eRUaneM;GMu94pcQh!@Dn}k#wz~{I$5GND#=yRG zxc_10{mm$1U3MI+evn}YhmL8Yl)Kw^C%CEn+=1w#THU_ShMV@vn`$Vf@Alo>7^q>RkywUf3 z4n&@VK#J^gI%iOY-EnwHJw-GGec0kTb<8ri3kSaydQ-|xKo@@zmEV^27vz~Tp0eSG zUUC@o4tB|>x9=D}PGklbU|$zM3>rdiwt9`+683HJysfu3$?qDOHM6&pt{+a-?5}o0 zZFC6lC*{U60@re&#c#Kuk$tg;kHQdT))Bj9XAoz_2ThQ~7)q zJHXM5c%EBuNqU>St)=J}@pJ3Zh1ph~5PrJHVdQQw8s@Q|a@~Cz!{+_rK5VAu&NmhC zipSVi)G&Vc_2AtX#lrQw=`G2#o&2%c;{w)UCiAug&FinHi~t@b6aG_WkVabLx|vtT z5LcpA@*c~BI96@>WA%jFE+{lsnF68hZTQoB)`DAKS8#aL)F!!cmM$0}b&D=gOQwa< z(WOtHAYH49+5j!l`6@$$M+_h~IhxGrB-LG=`vqF- zK>@i7Sj08?q4D(mePb22f5rS*Mq{z41oNbR`HuRlxQXhtJM;v_C|pK;LUu>z)_zhrsDO1QND?Nb(nhqM$FP)tB!TRH_#4%IrOR12)s@uU zlnN0hfg2t@xKwjY&}M(d=S(r}Q2v9R`+msy!q74}=c(l7YmxG_4fY%bEJ^s2zA@9W z(`1&RVOgPN)S@;b4IU=7+l8fno1(9Zoz5<*pwG;|5IGL@{3fQiYsc?>myV5=IRC** zAM^5sY4Kw%srlD7ryEY56tU!J_>#v1>V!N|d*KW>xB?^4>uw6+;*5Ubq5arw>r*>X z&D1LPd69ROcNt@J9|4~HUp(zv;x#Af*p{9ldk3k7s3s~VQ&!Lof`r(4GT4u!j1Cdx z*kijfuCPzM0$K7vaz!~(Lu-#bC+;A{9g-S&rhkrZ(tnjZG%MfBfvBZS}rqh2+g0Xzbmgw z`5~38$Yy@s?wm=lOKPa6n5gHGCi~-;T5(9iKVjsy392n<&_bR>k8V&FaY>M%Pr7{* zG-RvvWd0`OK3bQ>_iFSrJg=@`kQc|e-P}j90%x&k51dY*85)58loO~6Z8kx_|o!J$? zYNlZs%`aX+XY9ymB<*tO;_J%@xRCKdmLF|T+U?8$33?Hau!|mfCUfG?BauMz9GroM zFOHn)b#Ru2s39MRSXQwUy`h}^yk&=k`j^yT_3HO9md5qmZS?x`0^dm$n)hk-`#(_C z9)df#guc=@1y=ljK0PYOKVNr%Yki<$r4;I`?5JR*RU)(gGECInLVPLK*C7^Nh1Lmr z4U*n7jUL$j11l}6Sh_9&(lh~nf8M6%@U%Or_>T-NS2*P32Y1s}!2?8atk*dP3q zKJ}#k^0VRsWXi%=-Ezo2qxfphzlTGuv$!o+3!uYoqpRjeZ5O(T=ZZ0k22Id8pgmS; zYTWbSV$nMx)sae^9vlCfzSA{ynTiWvO9p6Wh!x&V^#2U+>nbD|XXK^hKFlVN79{+f zx;@eRQKV&aC)Nz);_1F7n5H}bh=qsH_8ArZL{D*Zr}7v3+Z}S3D>~xsH@~HFaDV*; zn0*sYtsTp|DnQq);AG)L5|b68?h%j8|3+ZXxo;Oso&~?)jx+6M46~lE{OPy>Lyu(O z)J$#&w|?7641FTtC(74jYq@k?n-g(sQ+8yi$@(>d!ieotz3#;`Bx@5xk{S{M8nLI& z>|f8g3;aDz9;x2tGv)Rw4AK%y?Nev$K>OGeL|@|S6yFT*%#wc^-6@8>p}jmUwNTf% zl!VJOz1y<#0cX{fL1RD{5!(2Lid<*r6GF@hYs-)VeWQEQ!)D+3yI(G?PDHpZIZ6e4 zD&At>v=G}Rw%(e7iNLCF$GHz1t!E$pLTv{nUxLnh3uzN6xr@pIx~*da{+82ri;mRG z>>kDqd{Y`PP7_&thvZ>^I#z#HfYYSI&LafeC_mQ=o7ws3*$=Wr%cz{zgC?dMvhX+B zgHxs+-D@W$0-5V}W2qN`nUIg^=f|0yCOfgzx$R~Tn!Gux&q{d~%zMwq)O1W)^~SI% z$~KBp-^eZZ-+E(pb7iMHf4CpIX2}!$VZLxvC0my0b6)OBJp+*B+v!4x{ppV?z{liz z*mhct_?f@3t}TNo1AunWo+<5Ik%_n2(`6~lNeprlJm4gUw1POImS!Zv8vP!MYH^53 zy+zB3`BHNk8FiK$w$!&T=az2AUscbK;&8+6N+-wf1^cta9uWw-Jj@7`FIm>NY%Ge> zVrRj;4n}x*t!`NvC(4-;(h52~hmWuFCs)>9(z_Ol7Vr)o39^9K(xb|jFC&u78R~D0 z(NS%`71D^Yxe$;t;BXPuDY|X0eR1*qBNtZtHyf@E!Z1rC0?aCtPmw|e>oXxJ{OfL| zHF?A`plU;7{CBtS;0~XX2{-#cp&NOJ>>lk6J13;g8WsLXlO#_;bD#)m{ldS_kE3$F zTxfsvHf2a--e=}$Sfz`j*56u#zvVU*br|(-zk*OSjqG@af>%~Lq8M06prz;2pLLF{|qhB1-h0e9MQ@gVOFK#WLM7T@tT=9Br@uKV-xiqtoL;e=C|h z&x9>1t&JRaj8*J(f#|G{{KAy>%{+gkD4%p&>|$~URj!e8Rb9D z{x5E!=0d&>&SOY0mug6Kghj#ud1g+CVBevAYfY^pc%O<7592Kfuw zip96uGh*>(SJ4k^>S~*ozd!@~r?N_ozP7w4kwdqZ3d_)MNslfvk{X~}oy8_Q)kJ)G z8mdKa=CbdW(=M`mbff;qn&l%^_A_r|Xx~Z1!3M|q!v6)}1srskv4osU?;Z-{uzdUh z?6|aU@l2=hLePY)I!QT!-6KuRq!R-9lP;8IlrHM(G$Dv z1dlZ!pVTV0Br?^lDa!e$@I^UO>rw{$EEk=Y2~&mkp2@ycGTy4|yP82uxkJZWWn46h zsp;^P1AQJ3&`y{UJ2Ue1uua70r@ckopi#v!!YOV51}J zCv+OGFXOI9s95(g1N_Em<}!iS2c?mNvZIXU?ei0EA_9n$>~Ws4k67v0+00&zz#3$W zm;u$mP8h834^>xvfS`@x+F6cAQ3=0M?sBb}({CJYL^?nJZ7s7{a397{ZvN88UQ4IX z#Ga_N*9teERGN@dkU^(z0TO!UeXP`L%0r}hgxpI_Zy%&2O5^)6slPx%rp0Am=% zd&nRX`<}+r({nf5!?xer1PK((xK*@mc+u!ekbEI5uF)`z@qPbk35G zL#*60pjAwNHU9^1xB}9Q&_-ohw&BmUA|u`lG-l z@`_I{s0U>AoUmiz9}t6{cJC2d z(OJnK24Ui?rELxWmIpB8?kk+rzM~cVx!41+drlMju+kw!{B1!Bh|%ECfYYEQ_0|L#T$Y3C~btJV9GsJDWdU#-+kPe!mkk*N+U24VJw4+U5jEK!Z zHuafO3o-RlL$?^+1m>Lt6Cz}|x3P6tI< z=M$0V*5n4!_QOU8R#}$t?v#aWe~2|&Uy3w^h-+ly?1fm{7|coApN?8JJ#}Qi_1*xE zYE^GdM$-*g_ffU8J#gXIrGMm6vWN;5hZEb+WuPU(FK<)uN!FyrH6O4$%h zYktdPhfKbp^AZVnq}ALM;uPl1Tv`sfY_u!Sqh>G~41JSRsm^t5T z@f9=?%l{d?rkj6BBsd#|*@>k>a$i{``?T5UGZz~6yH}KVgXmvxhwNTS-VueT)&X_@(Pgq)qeMm!$?-7_OqN*fVl4@|1zKX_GZBMdz1Wc)+zgbu~JONsPt}= z(zOpuYxT#6zQ&@j?IJ&ET3?Z}*BGgM7Q43H!-}%xP{QF$n^% z_^Q2YgM`AaM}o3<#WP)@4LE%$>Arwf9+!4Vc)SpBYmG4h-z8Q*JR zbIz5iek7f;E4*=swfz(rW?oZ4i0Ygiak0B&L|VwJFR}Kdv*kC(50kV_Uxf2V|61kEs6orjqT`|MSO{i>32k2UV@fgg6E|SX1gs`NAh8srN|2 z#xUT6Yplf_ZPKaBAi@yv!4j2XCEdNYk<);vj(p#?IP?vjwr27!7}7>*4+=aS@4k{N3+Q43w^#pmtkXeD!l zP8;^Z8UhK6QlbNI=VR5pvxAC6qMS#wrtaZ%wi({iTBf=-hB)lecO$%-C($+^DQ6k} z!ur5D-QXq5!%2Shx`+avxer~p{HfN7BZj3*VGBEOgF~wjpFxjL4zu33-g}z|Dt!9> z=g!xd<}Q)0EbX`cQ8CGSCx3R^`CZ>?jbl;Balzezd^CuCeNtLZ8+=8GZjtTL7|swr zV{y~1W>7h?9j`$>CbYWY!;+3Dw3Xp*T=JvO{Oj9*rA;$$*h*7-iqSDk#P&X-*5UUE z;-K&X_G~zV5U+m%dX3O0V{Uo{+=U2A5)V+5V2_zE^k2p3SukauC>KwXVYAMjIuSz{ zJse@7c|v6v&$~ybE8`idB{g*H^A|Fp5X^>;Y*yfro)X5Wx=TBfo*Jl`=#D#1$Op5` zp`nduK4-D|J}@C$z31-JVJpC{Mlg=|E(q0fs-u4K z`fNzg2`=;BWc>Wi&GjqZ(#-k0I7M6E1<+#_46#?s;{T7@Tlm33 zyP8p+56<*VtdTt^Q1hpcVMVN}ap?F9)z;+eFJq}ptW7s)CGEwr0MqZ_Y-t z>Si>iQ0GQUjn52jWg48@&Anr-dvU61%L+BCoTK{;1F$W2^BC7DTD+X3jp=>Nj&52B zK(|k63ssXYY?rf$H^q-{!cwLcl#ZNoyqEwHrqTP1wYsnrC_+{<>HTr@ z6AgVd>26n8LTXIAuFMgABTva~LB+fCNMzdf)$XQfNV? zDAFjQQc00EhBivlu2QCGm!?g$m}4mvnotqdDD9=8#Z;<8%2H&Dv6Mr0gPAciW;@IG z@_K)Mzdw4EX$i&WWLkMXqI(wjd1uwedB+i_x*@uV zyMO5BP4+iH9I(dsH&f;V?_CXS?!-1lR>*&B@?ED`x{0NE*B$#)37gdvxoIjpI8FqPlQT^p$EhWw%i|%itz5?kQg8 zGUC7a@W@GbHYalMMEdv>h#eWK`vx|(D#qUPV|Dt9NI2=(^F<}D>T>hBQ0x#VV+*+f zm5P-Wy-ZD$Hk0WFs*-%#=m%F~sPj30X;;r8HVp~MZ)FUZAEl{9h~C_ffk-BF6W95H zWogKyra4dffXxHpftWjRo!)Yz8h8=7-^Le9XSmv-$Qr2HW!M$_Cg$3{9CF54oy%ex zF`42I8B?mqNQ?Hj@BBbp9_aVoNk!4tE*uC3gP^S)IKTDX6|^uZH`6Qs^L61tPAO~= zK|+4?vH7^r#xI?#&3&kw>x-EN@6j(8ZP&6Hj9!AN zaROQlYIvZu@jY4b6DtjwuHKk1YsTckc>PDd<7*g6i~s?pijR-1!TY|ADm*{!)~mt8 z{nyh1$!iRL8=Az3Tsh&)9^!7rII5i)lm1Wmm78*QaC*HPF=C*b*TZ-*oxf^D0VMtv z+&@i*_znMIsu}R>0<}7Qz>D%gmeh+gbBk^8QTsE<LwI1M70$9*uU83HYNW#@eQ7;2lF{ACd_e~)$^>7f9*pJF8t}}lT!en9=I1}+ zhG$$rKMd)SpY-~R-!j)0ksr$t*Hwh&P~Kty+}ug@9P&`=4M6FS-1|D8h^$ygjr|QO zLW}|?*oE-9qNk_EmoS7wd(%GEd!?JG3DM(UafLRQt`balh;t=XQAT+(gU1;4tBtQH zbDDz~#8wTt3|03yrqMY|zGa7yaWlBNslA}7=Wz0W#W$y>P3TquQsJM%@ycrSt3kASdPP;@q zd8h9;IqUeOy&tgWzKvcF{P)(Fix65AC9FKEIaU!5g=ZU|NoHXajzSAF)o>wP^>LZ* zP=F8*LX5Wn%j-F2h(O_>&6;?mm|l3;z4lt$Yx9RVcub@TDgQD#dcO;N*MN5&a?^TO zu^2wQ6>EpAKy|uI?Dm`PtVU**j&|$(kzLPiT&{e#c+P>h&@V<;;<9nyKi=EDeApft zyJ;B7Z@vsFEBYz3AIm9iw2;05AzH5|(e+o6A5!=C6CnRUk{HoPYVQ7H3>5jTn{|+C zjhr=fDl+h*C_`Pl;o}=%`&9Ff^t*a%3sr(cu8j0jiP2YpQ@>V0|$%L3L-;uM}q{(l;+O5iBRWdC1@)Eg{z7ICO`u zz6a)Ax-uS#)gM@+kFG?>SYDT!!!ui5BdkUKhU?u{r*)MhlNZRXLl(#{P$rQJI)jcC z%DK#-1N}UFi(?F*v-g_-A@o*%B8#x=-v!AnMYhV;t)IwmuR@5EcA-E3GeP-6)1Cr^ zFgi0JYoQIKU3DHl{-Htmw=icss9uiqv|FOn|ILS6rDfNRUKl-vnc}fIo%)v;hec8tP)PTy=qIYy~^6rafG|LOuqPwYhq;RZqih6P_dI}?Gd7Eq53W( zRx5@vOyhN}zLN^ZY1ors(zJQk=SLeO4Jq_hTPA6HDFW@|vHFh6OtpOU4})@uyQ_*J z-6u1R1iu~1r-4$T*TSB&JT`OC$ZwuYUoq0n=qiwshcQfJ2_MRPSUIOquHJXi{@Q;s z${mI;sk`)hhXeT59wpb!M8)U)9sX>oIeyC?n|si z7cE^dD4iNA`3W{PWDsInt#a(BMSJ*fGlBUPr=MzDqR0wuI$sidZ&)jAYlkht!Ed67 zdql6>D>9N0_+@r_t%A%oA_#6a1eDs5FG-sfj+L-;y=25b*-!CZro`&Ii>S|7Ty^EF z&|0A0-8nr&)k9yw-A>Jay&I--Y+}u)SE_#g_4Z{^X9@q9<(iLG!6V&eVHHf4)(n$} z`JjTkD;=n1hu^EQwW_G`O8g=_pUm&4QU~>z^<7@kTZzjbk8LG>b3Nv7)p@@}p%tQU zbwl?X6Dr5fuhwej_3KJCGWUw{-(X~eF!wXVL!@?-3ccEe&|K1P8bDS&EY@_GAS>wU z0c0FzB9R6_13URc*^uABENLtMu}fe1@LQk8d<$TpMh;Zqo;j3&G_mcDq()0_*ds_B_5=`3S8Q@)5Sy56&RkYfJDF~3X2=?VY;PI8lOye?P)Jxv}a>f8~SJi zYna(21!~g<3l{8sU^fKbYJ{Sj2NEBaVVH(wh_wx}wQbZ4yLo8(z-7BlwQ|1VUH4tA zJ-A>L&RxCc`Q++e@_+)M#K5#lu0MP%0woOc)rL;X5Rz@98tUDM2HhRdBG=@eP8nDPu}Z8|bXo4#ziUH0a8ke(;Uz@-wE)wN}~$&dxDj70br~KU&TdeX{f}<0SVJ0d>o$@H1m#Z z*XLn5=k`ZSa`CfeX3ILTb{><}oJ#1IF+(dz4HQbP1;62pHjC+QQ_fo^{nU!iC|o%a-Gw(q^S z<_SG#H@E1Umtd#?@mbbcp`nimenlh8LlqZJ-C_!O2PY1sRUgiwI@}-Ee+z`}R;7S(GM)U{V^Cafxf8eCQts>wu#p}4&@!4zTI+qm!2(Lu+LT5Z{V;})z{P6SWui6-d zRQWUx$ho;e$+P^W2fi-FdBbUefv!B~?;5->UJGnKq%)u*l=WA3mT?9HPR;|f{A)Ox z6gR-M{Y+Y+lgaNtFa6=H?|BS_K~I}QaPn{3`~uS!-M)j~ygn{Tp2=`?Zcs(8BJXKV zVfXW$FMiuk79fU;$0#1EEHr~xFZU&;gV}w87mxfyYu!LCTWnPINk!X@f%VhLwR>61 zDz2d!v$RsMjSK#w8*YyO0RjhXEm>TET~ezp9*t`tqtM#&y~7f2drl=gmTy!xbJkQD zEyj1zlXUc0p+w%IjZQL{u(ol<#@E|%v&n3B^VkHlR(?9v2$>K^cC~oG4f9`B(c_rN zWcerlL84rMK)#4lI3df9y3p?1g#^XYG!wrjCaoWU;`&JYngKs(ItbLTBNq zm5z_N{Ye~;B%6zK!~fD- z58{HU!B-gVk(tP_QKz-;pnIBKF#HxotB6grBWjkkLm(v#U2m1Mu1=F2La(soX>dIy zwRATOhLW@3y7rlMWuUvAzZ#g8Fy9=RaaD8ltGG+Z&4gxeWpiNyemBftDdVXfNY9?z z6N;GgJlJI%9pgLOtKeiEIFuJ_X)E;VA*I|)6)#N5mH2~pby>=DB#l(sT{R;2sAiFG^5bh7xCb_ZC&AhIGSw61 z4YxP%)TXMFwKUK9Q?rgAw7@-F){-|P7QC#xzM05aGD`%6ZkHvL3>`ONfDyaxqvaVf zH8Pbb*VVh%yzR*X+Q`un2Yrwwv$~^c^)NoWHZK_k?Z|?_DIYvh`u^PE-O<1Hf7i&6 z2#ODFOkF13DM7Zdx3zwz}oddP;C4Pcu#uAdby8Ahrjh*>}D*L@Lh(>?!uw_m+ku1e9f_%u|?j9_PJM>YT>tV zNUe5S|BVY#hUey-fD|%yqrEV!SNOFWz=gtdE}_m*f%EIrsQuW%b&8wt8p%Y%?*iwO zXJomr*Hfe2`C#6iGXC~Yk0Z*)ks_L#1(~iiw%p{WT5=v`k&nVztVUltVC%HFPWeT6 zr2ROZy5KU0Uv5jt_VSQm5Svuv*G~A+`=|SfLIzkNxDCUYjh)qCH?}r3Wv#x?o47>8h+K6Srgws@@ELqk>Tvq9@s2vDYllygj=$2z=9z0hv z{QZsm@z+p3^XXz|?<87a%yig?9*oi(cNA}c z0z_?!pP%6MNv+p%qS@<5>`QSG*W(-yyHl0v!&k&sO`xVtQXo&9ODv#$rsC!+<^p*G zvi7n&Y@?G>rhqW#C-WX|g!a`U*G`h>dQDnxVtCOvIMx8d;%fAu*T=}2N`F+z&UYk$ zV4??wX;`#eu$>xvMGW8R_i2Y~@NvRJgor8;@_JBFvf82g(`$g8kzW zz*R@oe4ufn z@7t?`d`T66g_2mY0K^e`W2bd7P|dVVI49v(B6_%C-s(oPyl`qRD>oAzj}QkVesCc$ z&tzk^?OG zb3HXko@k2);kH6{?m27ZXHfw0@y2^>7ZD}mvGz0r)qn`IOghvHcPR3y9y`fscBg`H ztW$kg-0K)mM^29~LMg{Xx#;Sc&9(njbV!7@B}iK;H5iF!cp#J+D-$IcH?U~}x+^_- z3V&to;v;f_^ZMHv>Bn+Nucz;@I4UZ&PKD;pyK}KlC1hC)zPNu|8aU&4u>qOQ@IIDU zvTt{#(55R1%Tm5T0$v`#8+@pVpVc1Zu(1$*ghgWq%qcPR@To=rxr`AGDKAkuf4`v! z@%VVqI5US#!(wVC{`QpdUDIb?Q+BfSaG7ld>O&FCZ}k%|zLqf>|CmerCx335&Pc@} za!)wY7U%m_!LWkssY?xIGaYjGFvI)LE@#ib$FN?am|H33TSYZI;2kMuv*wb^i(Nyb zS?F-HBXhg>3;WD(+b2a&s^nUji+i~0OlaOhmAWMj@b|Vwdnd5=xVBh#`Dh;(9e>uo ztU~B`oZO{5Gn0qIl))Cao0F zs;LEWx_BYIaG1+z53noG+a>iu?`eSek!(;LlRA>yQ=?V!K%TwitavoVi&|QSY0Q|p zituDXu&D7kBh+*HRTVH>vc+6r1WHWJ_NTXUQP~AbwIjPhg*}6KN8ORHY3fG;M$w35 zM7OjWTdVk=4bHA>L4dFVj&o4aaH0Qfp4){4kREbeiaW8ODhh4zh`q;^bLuj1y) zunNcDy}VGF!0GE&!-Z3vTSi_yQ=CC+UHK7Fl`rhk{vrz?cU}87EF)5Z?o&#FVcHGR zc5H2DfbkuP+H{j~3fpPJU_cF%XFrwL2dpoDx}m1Q4fv#R74U&=k-p4JESTp6Dr29J z*1(hN1(0K#dK)rlZL$A}ES3oNG|M7gWK^~8_S#BeP-3;I#rHb_fTAC zqwOd;ZN?`(2w7N$w!*A1VJx+F&S)4{!4{$#8gQ8Aom2SKpHq|#C9H4EY33{8U-D#p zA}-;pERo671a7x&JBHY$9wQ#lpVzh?4>ZSy1JCxT)1zoMOE1LaPuBFGYQb&n+(ej` zzS})`Sp)CW);Pq_XoKB!DtYTz6>_&jxP2c1FFfG=K*I1It9&tK`n~Zx!`6^RYi@@1 zt-1-5;4gi0VOGT2+YU8WAN{oKoyL(D=0uI%w|COvR0iZ0;o1i1rMRq&ZN#fErRmg% zA!^5$&Jj7&AG+kyUXa`W4R+A94pH6!dAVbTu~uLyftH67QFD$;r#0>fg`F@6v5U%; z1yH-pZQnR-&G6cMs;TrTxgpl(!?~SU6FcGb+d%X=$do=?F~FuS=s(v;KfkWZje{G65cFg| z(g!u4GPqALCl)mTPg;!WT=l!TruJ}CUYAXbjlnmX_E^N+ zrFm$WD12zl>R!gJq+MG>_Z)5Uzt)0fmP#?s_c^F6UW&m?>E4T}*!F>HB5GIGDh%6N%DEG^iDfr)Bf;KV1@Xy4Ihm$O^EWT} zsEl@*mRJqd0jq?e)%5!;<}a>qu?!FMGJXP zCFBvp5fep2UYE>`LNq+({HTr8KEsFCcafj%wBM`Ptd$WsJeSeys>;yl7HaYIY+J#!>$>>C$7(JybgKH~r{!KhNfh zqm%1w#bJb<(Int!53l0}gcJTolg4-G*A*#zb=7GUOjF)AK1Z~cS$AYi4qc^c1#vq9 z@s?1%AdHhoqpKIg^6E! zIPUi?XtoRc|5N557JekMyA#OcmWWwUHGUt|n`*}y{C>_xe!n9ngIi}X2fB0!1k#gA zn#cdyPIzrBqz?wv@0{k{&sh}>gzthkD}E+y{DS`FYMROo#?3l%J_Uk$_X-9kXx!)+NPV>7DOaCuor@{jfX1@y7i^5i`hy4)$D%`ZiUIJ`}WZkfTk z`+3So2)GUe;7bR3n9UFjNtz%g1Q{F|Mg3;ZRi>bo-6@QolfP&I6Nkg?Uge61`)1I8 z&DOp6gOMF!o}+r=T1VGDKQp{g5&4NnhJ2EtVgK{pFx_k+OG5Vea)}G!t@Ia*NzY5I zTsin?ptm=*zq?7ViH`BZgNTEyN)nGzmZbz`V^ zeo@Fmy8`rfT>|9EZ=0WlDqX=a8aURq)HO6~hx$d!s8dMviRax(l-AT%>dJ8%X%b^c zg=15yrq9W=oq6H3kq{vFkg9h&e{QQ()TofVOO@!}8gfGRQB*lpDeBZdCsZ|*C)lXa ze`j=ZhM(WO-ANhw-x5m0cio{uUI1&0s=Y;6*z}uOg-ga(VNyrR6SJGdiRhEy{K zcq;-wtucnXN&0LBiKYjbV0H0t&Z%Y2_zXb>e6HMfr)=%BN1538YBi5KxZ|-^kis85 zH;_zP&j?@N*TYu^wS*@=UaxEJC1qF{5Ce=pTJq{(;> zq8LEIpHm_ZmC8pk?spCXM2=lGT=Lxv?=Xymf3!+2yJuDVj4Z^~vq+gr!u`$ZxDcmH zZ&?@`Aml%1nN@YyFiC$aCXF-;m*~u%;wyQ;*|AW)eZ`VNH!B(74p|JHo%@Ry4U0wU z8SD@0Cm&^#?A7mHFp^T9?uj@~%?eTl)IXZ^qClgSA=|grX%cF*cWaoKBipw;X?qRg z&IlwX`t3iSyG9Z~ogeti^;|Nd*z_J)odtDOXEKt>bGiv?NWF17LopKGLmRh2BB&NZ z;1Y%JLVwvRvl;A?gytfq+Jm(cR|K*I9gZtvu^k#(Xa+;TOAxYbj$fHVFrU(q^~gXc z6k{OFUrbnCt@f%KjXwJ%PirZvWzJ)m>wf~X+n}!3J-l=SB&~<7iXT@%-1^hYdw?K) zDyG%+MalNj5OW7xM6I+^_$#~H7D8d1;8@`)WzAAB$#+)E_>@I_-=?dKY?nJ*DP2Nh z+ftC3+fkm0U9xJ^K}p6nFZ9t;Sul{7jsL|Uv8NAs|E|ecW^SCZwSBA@GkUsJ$l5c< zYa42&JE|VQ5QHNt`Y^~va!Wxd36aJ)OWkM zSQn3oNBVkFo42D2zo=yf_nLEI)s0ZZ))I)ZO6ddCoLPC)D|D)$7S?`I(|clppq8$ z_VHrB0nktP$b3u|;;v|+H}x@rs)yPEx0+`JQvPdH_M_I7ueSn`MwZ#(g*%L`|4l6} zGtNxjHwRq?E;W}Q)Y!I7#tpC1N#s5sy4QT$$2?XqZ%M>xiJ%4*18V*9In6@KYB74& z@{sK77Gi_!Clzh{{f90^Ou6_;W~Zt2aCbw#CvVfGx6;zsxeVq`xg2E4UkwxG~u688tzP8I1lOKdTW};Is_&}b3Pr+(3u!}?2 z$0fktqe$i&cM@>nTCD}1x_L#?uLi8syI$mX!i<{?I7Y~a2tq%@1izR7v*jq5A3u?? z)5b&A+rxLP7Oo{`A1vPV_3OXRxBZ*aC`flCuDOVldmrRO#XXo8(6;SQK`t_NavnrK zsJ|5OX4%Tt)KJ~QIDJq&r0Mj@;W%ovSYj^@Oe zCO(%5SMMPj3Kqy|Cy$oUcou!!Jx=>YwVWs$F@0aWdo!$a^D|@+I`xE65hMB1;5g!< z!Za*{b+>0Mc)!(fD8a{|BB#(!-b8N!-{rW`gP0RPnM;17 z&nNe{Rs%I;%>JgOiQ-fg5eqAoYI!f%gq$UvZ=q1GMO7-_u`=hL>1mM^Z4&x;Rg9Nx z02L@TI>gI2;iX$=Je_pxc&RsokT%bwnJlT4U%;620&SDWd?rAJ^qIFaj7nr+I`?TK zr;P1`vYcf)D#lA(v+#aGGY2;TNez{D)9IkzeF?K*S9JTXS%R6bWed@$8YyaKf;S8l zfnmotuFZqVzXZI3bAGBSj4d4+ZpP8W=H=ZXgmDJQ_Z`Hp8($B$r3pjcQt>;PI4!4- zE73i#=C$0BGr7#GQ?7h}I7h@3{u>edQ=)&IafW0~Lxxml(BbBpC1e9H!-LLe<=a zd!$L23#8tFfCgf)n)jGsTp|GfmBPbxUyHV&Q_l#2+?LfJ_(d+rZulO3_Bi794;XR7 zn+Ln(l}M3P5ef-PgCfTTs5Sams7ypCXHm#tfO)2TG)wPNGfE2;B~!EgW-T1V#w8pE z8;A2*D;HEDofwr_amKTbOhv_PaTrqia>fHrG|TZ$Q6{NTT?Q<(DSs%3>-Hzih^Q)v zbuVgRKetR>uA1wj%_q2w16}ug|B+MzLh<~^#%cH=*(&taK@(_2M=p%6ko9x3C2Gnf zFPTLxMB+sm9r?l-JDX&duo>=|lA zNIU=Fgo+|Yj59gOpp(sV<0hjO``iP?Jv?6kiT7Wd^;mJ2OW0~)#(ICXA|kueG7Wp;{qrebEV56b4+CX)t2CsO zSLj#Htih+Dv*JEUeTmoDb?>hlF>a)QNJMELUd|o(0y`=-1WoLjF>cf<+l78F8I*DB zPv+z_l>j%XV4}0yAbW;Y$<<*dLO|EqE!6p!KNI*;oR9VK70bFCp^#f~Omyo^RRMiO z{0lUWl}TA|j9qNLkG_MB-(^`7qLw@KJNb9jX4$W$0(-jW84CDX4DNH_w22zGTe2YH z!fWiZZS?CH<@+#c7rx=z)C;#Y8t|XRFY&mGr5b4rgM2p`ZJgQ+zxAga!jJqdVYAo1 ztzF3VjoqURN}(q#GoSpDiltu?sS6Ir&Ha84wUUfR20`)F0{>d}?t`j&eVW(WvWp&F zQG2_2R!i}m{bwoLji4$zq`66fXpjoC61Q}3@JqPWT{Emi>yupI9q_2%^6ib(AJj+Y zZ1eyGHbW!x%EwO!qD7vQ8&+*?Yj~AI+C9i;kQazu8|_h!T*)Ph2-c0eb*iF#{)GW$ zE&ai{JO4jD5ekSh+!z{InIt4W4U+!!P^vr;wxer$PKQRN5#V($P+5(5oIj1 zUoq5DU!$~{tG~_^#0tCmv<8+SdVzT*f+zjVhovv*ODpHxndVd#xL=#))PFif`rEM+ z4S!Rb51}5xnfvwUQ>Ym@*H%nx>3zI&UOTOkdK1@fuq1s)YRWhctm;nghz*KcxGarG zMF$5FWuwMm6ZgBa=Bm+@n#afP*-8ldZ-S&Pk|+c0j-$(326J&n8KUxe^H^a?>AwCm zG(;&9tvuZVlZS-Oxr~@|3d>cmG9gbdQHe(*dczqz&JZyD?B+*F(*|`H=d8c5E2Hf( zJo}BzKV;#>)yj50=`eN&D_mb}!;IqBB_p&W-yX(Sv7`oyPL*32uy_-BA4dy--|zjhIl zC$x9*8)nih<8~e%5G=TNA%sFVEvJ_Fx+~sQN{7~pPqWgIh)jg%VmX7LN02c3O@unylw*{CAiR<@oYI_8hlg4Lp}Y zPI#*%_x)mR1)3q(H*Z9xw(^7BhW3=@Z~Q-3)9qLH_5s#`T;?CUbP%0T_Fwmx>j#;G zQj@@pN?OeSjKOs$b7+nNm*Wt&!POiYI{f0{IaEILmA~>YB&6eI_Y=l6!T*H+Zu2iz zgG|A{?X@NF0J3F*f?7-IxphY#)34WPgsRG`pOn$0f+ap1iF`#Q3k+_QcNs5~oFk6` zvG}fUnBkh;Zd=HCcxoOp7uQo$j-C9?i~4N>a6ROk_)qHL> z?sGlmk7Ua<)8H2z4A;*LM3TBT+ zC#IaJZun-q>X<{KenNCa>7Cc*3ZH4;2LzigNgESy6S7pa!?AObUl9_^(8^Js9t;&Z zELrD2Xhr4QMag_DKDZP>xz#kDV{Q!^^@U-f%{+mknL^`nnP~x3o8ZS+q~qLp@t%J zy-y^)ReJ4&DjCwK@EWE~)~rxb=@#h-LZn7tsU&kJ!{@D zYqsZ52P-Edv0ZWKwxI9eqml*)*bL&Lp6{O@b)%Kv55IAk&dL~Z7o%++G~Vl=<}cG2 zc~}poIzibFNYi6`nqOe?GyXY}*)nhYVb_zk{9N^s9`;2Y4{Y3Ko+9W4XGT#=3%jM7 zA?K^@I`sGW){~8X0XCuwDYn&&R%_b>fg=WAKjL7me+=g%3ZJmcEIWfM+3iy#JXSZh zpPs&6PK!Q*6zhpggs&+dqAFrOmH9k6B@T!gD?dp({!v{zk=NF3HziV2U9ZP(~o_ov2OeR6Ln*FhOq}sB8rML$3kf{Ka-! zQRjX`m7-hRs+0xIq;$h5Ve>?lQQO3SC&gT`gKu>woiLr2EN71u&rCD$1G@;?s-t2@^}Dy99~8C`P{+76 zS2ALEpR54iReeNdN=>r9&0|gU=x1+R_;`|{g?W7+1QGIE9FNhKX^V;<`MXRvb@>u)6eAHTWn=p`RWL~$vh zPK>r_y?*o3fLHWmb;cFV#od%o!dQ5t^iPW+NqX6-T&&@pdZ?099jY+UpA1q&7zBOq zBKd02figH(rpMLc^J3PMr3`j5JDl&fy!J&Z;l%kRmRa8MaE8eY>&(%u293f=e+aQ{7#*K~@l;xjSTxaGTnfH-;Dkyu^3+fXWWaKNgo}QH$%f$z7Jexa_UGRgp4uf4RDQk<5;(rFCKrLA6r-dZ-oVF)rM*=ShM&pB~xT@(XZv(QYE&(te zDp1_SR1I+hz)IW{KLDe2%9BT)sQQ4m4;d4;*lK@fNoeXoN@0Cik_L~|4`p-y7u{8s z;~Z5*jn>6_Y=>8&38hdeA-C(P`2B;3#ccvAcN~TCKdM4x`=Ag#0IpFTYfrnLpV9rR z6STVD{Tw>b$%6Z>*xCURGJ&9iEfc94DRS^0W96}i9FhzOB&I*8w(X60L5?@yfgh~U z!dn=#Uq1fQ!h~9RWLVi*Q=vC9c}_z<&1DGX?xK_BoDidU7!00HL#J4rb5R8+qjlnei~0} zF{t8!@48F9#0PA(kxqp4r3B;gI##dS*Lau+J>Zpfk$uZq8idwIR z4uoS*sUI;_q_Fxdg5t->(`|iJ1jFa>pid3*cywde8#Hc`nAf1PKr9UV2*-r8=(Q`2 zWPZ~N^qRbfE2bYiFGuAV5tK?ttA&NZLUM9`F5=s{=UZs=p2zacJp5zjxRGrPK5e|D ze@*JemX<+*w0P|&Q5t1pNen)D-r(f!^BdwjrNVrNVZ!!>XMoOg~Nnq5j$(?chsQeFyI`R#&?Cl>0+!G zs}Wwm+HFERe%=RJfG0E9McavUI}DZ-_S|{!i=$FVbV!9#YuWSS+26RzG*|0aNIaLE zEZ%uVXg5qm(O=Q2O@z{`ryTHg(oiMgd@ZNX_`-@7j25CV!tkC=r=(t& zV~Q4pf&gjpi~q7de+M__IQ-%+{Hn=;3{vw{IBfcg=uW)Es*T{48=O ztue9yrWP9isq|JC-```#oDB`8StSVG=#nucIRAobPiUt>0<0gtnX3P$u3<_8zCt`& zH5OL;^f`9jxDIS$TF}7GYbcqUQHBJr+bv$E>gII;>`L-kPLjX17#?smk~#U_;*l++ z9qOtp_qvZFX0$d`d1%$r=Pa$lEqg&^R!B4aiaT1oCzm?yHjEW;tMg@W-h_;LoTBxv z?~dCguMbd;2Z+F$N5kLr=@_7t{bYJBRYC23^r#~FbuWJI#O(E{Ds>2|8a?(=UjA1% ztc6WZUu6z$kR{EjnN5xdYCZ|BHp;HxRyMg{Fbk@0uzJovgib~Vy_?@Kz&k2P`G!g4 zT-7O2(Y1CKnP>r1UUZ0hsqEzhafs6$Z;)T1gXL-E{5{CnBi~?sG$Hms&f9l@8Q$HRaF~mp3qCc6Y+ykm$D>p%O4dW8W&k zG-o7n;eJid3`kP7T5RHaYK6RY!wOzRwR-5X-^qf>^Uphw$V_xnWiJ~Lk3Jf^ zF!crGJ}J44$EV#Y$v%0S`bGRKQ+LhT z%R6X=$?m#w$lMqSGyT4krTa{r`rfr?7>sghhOpR|*;-JI30p=EPd+fD;LA<&NbR%#Nbxd)g+F zBR~BMfB9JSpphbLf7lrMvWoVwxLH4-dD9Ye;{j%j}nXTOk4NJa#bB-bcyKf z;$%AcI_6)bgHqGt>coxj9neLp(7}Kj>N{=4Csj0{8vk&kGt2&m5kAm)R#w9~*l_Xa zMGhlcVnQu%kvCS2uc41dfp0~*{Uc}=J8he@A;wq#YMy^|GM9cdnw%!r@aNB1_E92mD z@wVw$*J~X(53jR_*clNF!$0XPttNF&RWH=5i_V@!Oy_`^Bn#|<8pdofr}TZ0(f6ey z-f*)?Sz*cS8fyZ~js7xPrHfANyg+yuTM4I^82p!}=Jf7-C-K*k zPO@2Ny_1C8@f*%fs@Q~`g#3uvN0l5oeGwOUJA4KYks%cd8k8K9kr5u&h@7Jf7Rf?UQR02LEj#acy5m#vZva(W!(YNddJA=KzRkySwABR zLnQkJXyG~`b`2qqJsAJF;A0PM;vSj*gBPszhPT_U5l*Plgl#%v>Yh|PXrP2^@kPYc zCM3qB35PO1Nc0){q6&j0Im&|Y+3qWQI@$I^*vbaT*R?7Ri&&02Q@OJ7b3_XM@VSWD zIZt1OUJki1qzJ8Ls(r|%Z{w7vcpZBis$Uy5Vtx~zIkOSxSWKk?;X34er3`U;tB|p@ zBsn>XpbwXeTL3x$AB8Qcd}^42Fe+w|bM1@W#>(Iw;C|y?w=$4q0#EmKb1&vYS=q*& zurY=dES{c8Bk&#r+^JgtJVn>xm`g=>-CHey$@`KcdSVL~uung4NApW{0TE})gp zcS66U9UAjiRffbp;G+^p!&_>-Gqp%0vnNYjuvWH5ek@AN?F5Tm<(4G2sE@olo? zy=5}K@fXFG%eJi0meEOf=bt7WNfU3hqW+FrDnYb8VFvFt<0wovkYO$FU^=GSn1qg8 zy${v2f-zLkbF8;Wq=t_KZh|&(ZBWz6)ZAHKgs@VGj>!>t?~9L|DM`b%(KbfLpXFDq zbQ|{-Ub@@|yAsyMKV+x28~1_+^w7^ej+S}TU3G6SuU~P{Tmen!T$YpdKKh{PDAETq z7%2}*!YIm2!jp@~0o z(BqZ|w4A8z^+61lui7<<2n3!wB5+RV;Xm16_ahUHAkV$M>?n&w6Ul@FuY0_&7he&U zWFe*-)=)V$>~VI0@jOcFHeyS9m2H%vh+S#j$H><&4*paQgGXeFXNi}% zfi%P`x#4y92FAR77O4ace>7bsG;Rf}(QA+UlW_rFX5=agO#nXLO4w-VXXW!4qL3qk%{qSzdW14W^?a%lUAo6?Jnc%u-AKYr(a{|iyV z=bTV*?%GdR1U^Sb-pH#{@;#3# zn}Q?CK@ruy7)R>!pG*NBP2*UIIc3uaDJzKGed=iJXdUrJP%Y8bu#;l4ueOOyiQMeZ=U~o`bBXtiodxy)ye{prr zuq@hA+qcYxIU%Cme}=DhyH(FmOl6*^Wq_*`$7mUR}Wo9_)s*Jk}GQE z!-~{n)qQwA&-MTD^yL9Dt$*ASl4N8HsX>Sz-E0XlldZTRd+0K`U28IyOH^|Xijag5 zg|TPLAQf7UNlHkG8nm2g(KgjgP1DSr?RmfBzVG`_?%cCJ>v^8<_p@v*b|PE>(b>1D zKeLFcCF|BPDT@+WGZWlqjn-@A0$O;>=)#h-Ldr+bCCtei7SP&5_ntmqM~)aw)Z%mL zIuf9tQxK)DQlRbx_tVd*))F?j1*PJn$LxoE6@NGoX0=bsfMjG*y{w&LF17RrX`Hkc z?Kp~g*To3ls3rUb{=n5d9gNLRUejUu2GLjDeo(#ZI&EuyiO8_o*$O0=Mdq}X+DOM;~eDtcp5TUA>wFyIHH zTW@{AkN!@h&GfvDz6QPs_eA6V(`W+oInl=38>Ui)MZeu(oTkNe1okHdZZF$=?_|4A zw2Co^7r!lCdGHUinwV3Zw31=nHRNT`**iA1@OA|1A%DMrbprKuDnZy5x+s@5^V*Ds z`0SSxY6G3FstghA!1n3yHyP4SsPMPuf95Z{!HUt)j9g>cRMb61hMl(8k;BZ2@KVv$ zyZik={Y=BauSd`z22HQ*(C40XV60DvXPzlJex+!}#OnYxiWwf2tebH&RVN#{jY&D! z#Gh04KbKu><2Kg)CGR0*H@d}4#ivU+)lNy|#({+DSeS^7^S?=YYHrLblD+YH{7U0O z^r%0<`D%ZlCINl1E?M+Ix&%u)^;h?TzuBKmsLrof)J@jKtp$ITidaBftn{vKB91PX z9M5OvvXt&?Qmpc3?URQ80Eh7#dp4@l2EHMtB}ua9_66GZ7oHye*%#E7ni)OBJcIdVa^44#|z|X@$u3MHCBjencRk;(FQX+|8pT!WNj_GI`9MbHz z6WAU-o_&@TL_ikXv9X#|nixc~mgx&pm>wp0YFYN*jQ-Yo%;oa)`VQW!nCAaYHlO5T zc{mAQeDGunZ)Ky>?fGy#C}w8~@&G*>ufpay0u&@YgOOXQ0GWpQBJy(YJ~o-x)3`mY z+Ti;9K~qQl%a|V=8XZJ|ZAnmwnD;z)YT^WMop6OM?@(#CVxjzOtxA+gNxzBvX68zt zt9M5V%C=5NvDrrH17LTZ%FE`nKMTZO5u@>H{HDueVH@Ndwh*~zuIORS7;Ixr@z|kf zX;h=gA#kURBeu%TAI9Gyo-s`K!4apc@-XYgMTyO69upk??0sh2y0AXye+s!g{{w&$ z7PjRnXa2R^7jiy6W)m@>SaXw$r?oe&Suo>l6W?=jJ4A&&iJLe3moCF>j)c6g+4uVF z%|M@Bb+CRQ2Mf#+uXD?9+7sz3b>t27S_TATs z@6W7_F}lhJ@$UbSf$EZTjH81x8ue{;Fnw6Kzd~ZR`slus7QHc6L+^FB`-6H_DGaXolm<00cX9RN zy=#e@&*JvL#|`!B?ZzZ(GvQDlaHetP`jhCF#&X*s$8u3xa zo@oEkvtY)9+*))S|8zgIiN_S2JAZ)ER#{4zGUm9&S&!8&CCHQIfRiQzzI^73Cv45{02thGeBbex?P&pGtqD)@HD&~gi5t71t<0_> zMR)A}T!}gli;ii~lUC|E*PMWO={Sp_8ES38sGG3DE+FgDj6p-J9tm+Uox56jXpZ{q z*&n5Mdg4xft3hif6PHBj2OrWs+Lo0dyfDZqEp_-?SY3mx-!wnM9i{55@PO~1V_F7J zBnUH0g}1WZotbtySp;e+g;S4<=sXb6oA|vJpbW&5JXy>e8SeDg5*RRSv8a&d`jY6$ zH;9p|e!GNDWMyjCkkg(-um25#4++uXrpZFRNu)M#ZWBd8nI3&%DxrQWQ07IK+YIH4~=DQZS%lS6tk{L9TQ*DA~P z_3Ex+oOsez7fZ(tC5FWBhv-QMD*s(lFs>B<`4X)JeFAeGiy@o=C`k@}Kl=bC)IYWu@W817ohZ{m2 zYnhVWahp70_vOpQH#KhmY>;lUf9MGMU6Q>QmefH!jj)(3o14xDt7Dp6{O_33@7&Zy zaXkohsaA~sfW<`iOrlYi9})^R|fTL{TqL61HI%^7|U|zj-vuPfeUY zNE)Wf7gK;W{+u%xm@M`v71>^j!=r7fAEn~O^H5M)pK}iuHrR#K6LW7w1rHuGYjOnd z%?4rray%1|Q^vr>H$y>=jilVR=(}FOYv^$y>$&)rbKT7P)M^zB!ZdehWVDJ$ZoDn34sEK&H@yp_jb(#Q2+6btnRp?#%*V~74 z*9g4gGf8Z;(r{P?P6l|J4fMC^}wC_w&l90FUv4? z0nsPB*JuCK3+GWvZ{mZyxWZkyPwNhoc^h5iZq-m4Gb+Hb1^Mql-dOkIsl;FuKX!-8 zr_0sg8~V!&QQ)Lw zozgQ~oqvKm{=;(R!ob+(!;yqy+&JlF#Mk{JEm?_Qi1%ECj6U zv%w>?Yy?mGW$#dvK)%ncbGswLEIoP-FSR13;ZH6pAmN!a0bV6tb%DHozU+4JKB#bfs;-~t1Uy}o3| z#`|2@!2^EMF_(9$Gs*mnVE^581%SsFOIZ-PbCL75YZ`2oR{Ub|$Fo?zI>*4edc13B zB&G3O@2`E;XquO7)@7nl&Dl-*Mk>Dqgnf9*Z~ZCCw>D&+yz&!2{qzy$L$#Rll;c~g zq4H`({6XMi6TZqaIM3ij3`~+tC58_B!Av8%e=9^lh9GVmg*J^qo-?RsmKoCCOykCM ztNXo6f?zp*VsB14KEHq){{F3KNe^S%p9@n8mDibKk=^H7F|8_=p`ne76T^}1h#UwP z9NN}-YI@d>F)4a)VJF4-eW@3p610uOS4XdQD`oX7+sTKdF7I?Svmc9gri_uhv$Tqb z3jxN?!!3$F+#89e9Y$Jg!_oz%Tl!#LA!_{%HJW%moE$jdcr=&tNXVbN=*PIQQTQ_y zyYt$)n~9_QR@dL)8uG!c$r?-qW*} z4!~jqRuPlx0WVXnC?38~b-{+q!}~|P^27VC-#7K6%ilNSYmfbXmF!d~x=R>i8ElZw z4ezj91+j6SFuHX5Hik2NnMlRoz=%@9XC|i=~T2Fj%u9B4eC>GDme>c6CRv`rRWqqpmp4N8{#Bbx`w#UN0bS9N>;(v&$lGz` z0aeUDwMT?0bj6Z%azojMUdGEyiD`)w|1HI=CJkDf7u4`oc;%4g%qG!?asR7$?Y(mz zc!#Wb4z| zL2NY^A2fEwMPke4iz8ttErgVO(DNUso5gfqY#bfPK_ILQ1T=?W#%DX~6^GY7Bv2$f z^bv@H(Mgy)H}vF1vQD%) z!uKmJ+-~WYKwX)(+os+^HZW+z-%nt@N;n9yHud{z*q`a~2)0#5M`w0CBD--{6rTSW zI8fAbdJ8GTm2786_=TbGVj-74X89IX+AXpnTwzcKkJ;uY&iKw<%--Dh!dv=J!rX@) zz%p77ExBepmwvczB6!K99l7S84XchL#X7h90w<#ZkS%24vO0zB2L@Ywg_J5nP zil*R;d(138jE}`f+6T88_vj-1lT#b&Mcp_m=%MgKs^zMc`oA~=du1D4t+*v70=MT%*`Kxeh}d^iTXjZ2=q_#&B{b6B>VwyqiiX_HPuXYAHYKLY2Dgih_)*zc>dv z_oYvP`z^lSWwDsoOw9+8#n7%CQz|Mr%@hA=xPrJ8{A5@czFAiy@lq$~QRZY-@6%SO zix~5r7YS`((78rRH{B7qm>%DsP3y2@hZ202RU8(^i{ZC1V-ICFSOwkI3u|X za`hwxm(Bo0)7+8>+BW0M{E}GF+dqb}w(K!SO|!U%L`b<}X>nupngnL37+$;Zwc2s< z=<@NCs|_25P=UkS?a*8{on7*%gOd^oC=&5 zj=Hga>{dp#p|t}b6hn^EeGf7rs93h-ZS9XbUK(nH@0qy0W6+J6kQ|5QkmnJ5fHpYR zydG`bAk-uLK7P8})J1^OQk%@vlhe?o zXfBS~k>g7&(a|GL>QyVTraobZH+0Z+!1iA}|C9ZQv8*fi$6gV)E4So`_9lD0!^=|) z>V6J$4AFRalLKpT#$&_BW$H~<$pVhr4_U@`w;fpvGMP)jep#(=gb1XYXPtT_l_cqN zn)AtS$OAPPgKf=L-C?`SM4zLcRAVR6?zen0C%d%?)pctd5z&>8LI~&fA<|VbMUCQ+ zE~Ox$^0le2iS=ic`Ofa4BpbenKghoPIrBI>B#ViL8*U4n8vw5Y&?W^LUmZsRTFV+M zD|}fc21CB<$~hm3l2>um<%MBA<6_nq-rrBV$v<5dX-hbth-i^Q*|ou*A^vV@Yh@rZ1pG(+8ga z)R=UZU}jIcPR`%^H{Omm@BN!N*+D1VpJ=b1cj*M#fQSnmF;9E+z$Zlq4qS_xcme$= zqcGohUTvQ7DlyGQq62_l*)&2c+y1wCTk;Uksi!r!;&w0ro?H3s`l|=lt?XJ8%p`F# z5$zY+t`~7r*2J}w&$sEF6N(k%o%dACggO`Jck{pJ~ygyPaLISp!;Dtph`x2dm2E) z;BV&Lq}o#Hyk2bFPVkGKm4X$QUgg*d{-!h7&5Xn997T*oZC8CKU}c&lHa)D$;;&u}PH&etNl6g4hegS0(m7 zzVkc{M4{_#k#o`u16r~Q_$E9c@F;!5H)d;?Xd)Hh%oDsHQ>O$M7G{U@Yd zXQ}sOlPxhq(q_ebGjA424Ed)f*yxI-Tl|fW!m4JyPaBK7ZCTl7KO}8kC}n#C_j*01 z4R4F@_H+54JM2R0^hZMqW{Vo#AtpL3#436~hpa6aWRq=Gz|gA7wGRa|(m* zkyd2ueeUs7E`ghy12y`J5S{*<@NDhHrdF{z))oBM{$4WtUupv$-LbZz!+X&mUE)TW z&AZQ8Z}H%CqwjaeUfw!@X4ZIrl`@_dE)8ms7Wo;XQ+eMqx~@GHx3&*v;b}2`JaMz* zPZ43%ZR&wqMPI8qe#aiCZKCDLEyVgulkp@-+Zf-LuNYH5;IOvAN^Vr#Dw>w?@pYZc zMGOO10*8_3(}-QumE<{axc$~jZW2Zakwt?R!c$Xl>*+IzUox|$Y%*qjX8fU{CX~R7 z>!0z;`mOxbqV_b{DF*+V5%p0x>g6~4zZ@(#+4$do%$^}~3;Wu!^m*A2igyDq#GRA7 z=vDk?`EW#KbkW;^YjeNM1=~}6u!P&>^{lf4a>W;SZg@ih3xu0ZowofWwl4khn5FXo zeJOC+#uekVV!wdJ=TuB3Y%b;hCPTP8{xoE6T8rB^E-bx=g@+5<6o=>hN*Omfj%b~y zX%%}!RldODXU)uuBhGL-jXqaIJbB!W71ZvVMU~S^{n2;yfGJO;tDL&Ee}RnPn|Lsk z;4eC8-t1#@L$obn_v?->p5J@-d+gQll>LOn0YcpTnUpy4Gw4dD7dnw511)p$s$%tL z8|3oOWs)kuX9tQ;j>e*is~mb6AjZd2D6KJ>RM5j_c6-eb5q*pfqmFF%u__|CK?MM9 zQQ;q9wuW8Xr#B#YN7_b=ocN+n8|X{s`7f%(m&BeqPvZ7HG$2M&e*vvjUrKS8`i2s>Ag{TcD>rAgZ?Ob zbY&iS8vtVCG~=@n!27)SOg)1+*QEeVX~{yvcK>{_Ij*z?bUOF`cAHDFn&7<@wot78 z6`7VQ;XSsU38-^nh2 zK7TDSdTXx>3!8+^!FOI2Z?AqOKpPHVapa42EJan6f~&~S?Jo`tY@^AA6H#csSWwN> z$+X^BcutbXD%`46zof3c?-rfUoO+N`88mqydgkU$^l6)?jk^E#KZvq0+7q2rG$R?5D}B0a5trx_m2zx?6`j^*PyQw~q!`kSH#e4<0Btz>mA>FA1aN8rg| z6ekKF(&JyIk1H!3u8%pCW1?V98rmjK80NueD1c<>(@`oB+@2TYxJ5FrquS-JQ-%LAYDkNuLbXXpci zoFCM84v`IjRZ%VvOKQSt>*zj%KwmdsZ65Xa5?i2lGK~GAt+VfKLF231%9h=zSsyWiw?t!JpD~|4p!|vWn~C^J?3eBMPg0}qS=|^9q_UoI z!NjoJkkEO>=~bE7~Sou@ovL*74HuINZ1oGazfzOj4KuX z?poSLkw*M6+6=p0r=Q;&f|orAi7s+kRA>Jtz#%|7mTZb+j$3Bei}bJ`J2UAnK31al zM*Cu{@qnjQ{2tSOyY%tT95EqJTyh`rY=j`u!Jor#bYj30XLOY?uUqX#I*L9vVqNP+CRfE>&M2^I7lBTDA%^h+Nsr_BeolV$nv*rS8aVSMb^0U(#I@S;QHeN z*`OFBRh`IUPm*u^66uuq{kE|3ILHtQFPxyzA(Qoxii&1hb9D>4{*FJ~{|{MVgsz|=TpJaKc9nV)O#s`~lQ`GMS~ zp?cof568a-Ts=zi z&6|czy=};NmraYA1n=@dj$6{9CeOcK*w$Y=Lc~7lC@KB^IJ>tf^|%;{!Dtj#DOQ#jTXKOFzM zGn6Od%9KzIWy3het)@f$K9cYdIO57Q(8&FFhqmmf@0}m<@uN*@N~KMe@>T5JWh)5t z6ef=Ar!Pn`)_ob0WeiyIAu{<{p9p346-j6SwW#k8DmEhQlMm7P8T?n& zM=%RAh#jA^mFRpcv>;G1usZMDL;cq3;<)@)g|L97w!Rdh#d?+W7smFlkm0XsUCcg$ zYlDMwmP&+!tKeV@#)jiTw2EJivGd@p%b?>COmH@ERxwNE!C7NrWdLUdz`?6<3pi*A z2fwhC(<>4B2W|mZu7rc}w65@9f@_3>Z&|7yu3Vv2rJXM92z(~Y-DmXX142AkrVZWe zUmUh{O_d)^sI!^<%}(ScABS|G&$Y3Ivk>&F;8MjAwVWtB|6eELWOsZrn^cFK$3?D`h)@*b6WAd`RY3GRF7NIK_qMgTw-wInqE&bJBqvajcsm_h(RQWxz7;&s3H&v%LrZfo$eW?(dAN$ZnMHF!b zlRQ}8c;e)xoCINKU~Na6edkwhrDkMtGT>`<{fUCKQB&S6dO$ABEf_a$x&rT8^*;H; zF@^BTzs){ODp5tC^xgfhXW*IqK@%6=@xr1-TDP}h>{23^l^R^Xsk!Kb1-lb|nI9Uz zXR)oh#s)=~geiM4{=!_b92ZrMzj7Ey!PUWoPvVbbx&;hp5iG=#eT$JP zU$Cz{+^fH>&$&Cpy?~;U^2>bbqS;3qVWXWileNa8OJt9vD0cn{2!TE3Mz396g!FXE zsPaF%M19@#oQq7!IVvc-JE`9%;V(trW$q<$;nR<|ZiC;77e3L5-|*o<0-Uka5Lq+N z6|Ob_)m&A!<2sw^E3$qw2ioajA%BSak&9XF0BJ&J2So)+a2z=J3hQ6Do8 z)_do;dyoA7ACl;lBr6FL**D7i@1PGGwcRD1Wuu5r$2oe%M#l?AYh3dAB78PaReDbk zGz6wOK9(}KMDuQ)nGyoJ?)yjO|HJrvYH>VjslU47sWnTNv28v7-u4b)SKe4Axu&vu zH|GK_Vp&IDXwqG3qsY2RdA*78vVk!w#PUX+dmZ(ZaxtbH;tu_)O~fpc_l~r*8~Ijt z!_2|o!NcknkK+dYeRt(GX@iP5Lu=gV0OwEO^8!|dfp5$i(GPoWG*KLB{g!>

    QPee^emP2DhS-eXn>heL#lO1+j^J{i&riz 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