From af3ee294153e99b6efb2efc221697104405d2858 Mon Sep 17 00:00:00 2001 From: coni2k Date: Thu, 3 Mar 2016 17:35:26 +0200 Subject: [PATCH] 0.49.0 This closes #18 --- CHANGELOG.md | 5 + SolutionItems/Documents/Content Notes.txt | 3 +- SolutionItems/Documents/Todo.md | 9 +- SolutionItems/Properties/AssemblyInfo.cs | 2 +- ngClient/_system/css/app.css | 224 + ngClient/_system/css/app.min.css | 1 + ngClient/_system/css/fonts/FontAwesome.otf | Bin 0 -> 109688 bytes .../_system/css/fonts/fontawesome-webfont.eot | Bin 0 -> 70807 bytes .../_system/css/fonts/fontawesome-webfont.svg | 655 + .../_system/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 142072 bytes .../css/fonts/fontawesome-webfont.woff | Bin 0 -> 83588 bytes .../css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 66624 bytes .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes ngClient/_system/css/lib/lib.css | 9277 ++ ngClient/_system/css/lib/lib.min.css | 8 + ngClient/{ => _system}/css/main.css | 0 .../{ => _system}/images/PresentvsNew.png | Bin .../images/forCrowd_logo_34x34.jpg | Bin ngClient/_system/js/app/app.js | 7733 ++ ngClient/_system/js/app/app.min.js | 5 + ngClient/_system/js/app/app.min.js.map | 1 + .../js/app/config/authorization.js | 0 .../{ => _system}/js/app/config/breeze.js | 0 .../app/config/exceptionHandlerExtension.js | 0 .../js/app/config/googleAnalytics.js | 0 ngClient/{ => _system}/js/app/config/route.js | 35 +- .../account/AccountEditController.js} | 0 .../account/AddPasswordController.js} | 0 .../account/ChangeEmailController.js} | 2 +- .../account/ChangePasswordController.js} | 0 .../account/ConfirmEmailController.js} | 0 .../controllers/account/LoginController.js} | 0 .../account/RegisterController.js} | 2 +- .../account/ResetPasswordController.js | 2 +- .../controllers/content/AllInOneController.js | 0 .../controllers/content/BasicsController.js} | 0 .../controllers/content/DefaultController.js | 4 +- .../content/IntroductionController.js} | 0 .../content/KnowledgeIndexController.js | 0 .../content/PriorityIndexController.js | 0 .../content/TotalCostIndexController.js | 0 .../FairShareIndexSampleController.js | 0 .../ResourcePoolRateSampleController.js | 0 .../ResourcePoolListController.js} | 0 .../ResourcePoolManageController.js | 16 +- .../ResourcePoolViewController.js} | 2 +- .../resourcePoolEditor/resourcePoolEditor.css | 0 .../resourcePoolEditor.html | 0 .../resourcePoolEditor/resourcePoolEditor.js | 4 +- .../{ => _system}/js/app/entities/Element.js | 0 .../js/app/entities/ElementCell.js | 0 .../js/app/entities/ElementField.js | 0 .../js/app/entities/ElementItem.js | 0 .../{ => _system}/js/app/entities/Enums.js | 0 .../js/app/entities/ResourcePool.js | 0 .../{ => _system}/js/app/entities/User.js | 0 .../js/app/entities/UserElementCell.js | 0 .../js/app/entities/UserElementField.js | 0 .../js/app/entities/UserResourcePool.js | 0 .../js/app/factories/applicationFactory.js | 0 .../js/app/factories/dataContext.js | 0 .../js/app/factories/entityManagerFactory.js | 0 .../generated/resourcePoolFactory.js | 0 .../js/app/factories/generated/userFactory.js | 0 .../js/app/factories/locationHistory.js | 4 +- .../{ => _system}/js/app/factories/logger.js | 0 .../js/app/factories/resourcePoolFactory.js | 0 .../js/app/factories/userFactory.js | 0 .../js/app/filters/angular-enum.js | 0 .../js/app/filters/angular-numberSymbol.js | 0 .../js/app/filters/angular-percentage.js | 0 ngClient/{ => _system}/js/app/main.js | 0 .../js/appSettings/Setup/0 Readme.txt | 0 .../js/appSettings/Setup/appSettings.js | 0 .../_system/js/appSettings/appSettings.js | 11 + .../adapters/breeze.dataService.odata.js | 0 ngClient/_system/js/lib/lib.js | 102353 +++++++++++++++ ngClient/_system/js/lib/lib.min.js | 28 + ngClient/_system/js/lib/lib.min.js.map | 1 + .../views/account/accountEdit.html | 0 .../views/account/addPassword.html | 0 .../views/account/changeEmail.html | 0 .../views/account/changePassword.html | 0 .../views/account/confirmEmail.html | 0 .../{ => _system}/views/account/login.html | 2 +- .../{ => _system}/views/account/register.html | 0 .../views/account/resetPassword.html | 0 ngClient/{ => _system}/views/content/404.html | 0 .../{ => _system}/views/content/allInOne.html | 0 .../{ => _system}/views/content/basics.html | 0 ngClient/_system/views/content/home.html | 25 + .../views/content/implementation.html | 0 .../views/content/introduction.html | 0 .../views/content/knowledgeIndex.html | 0 .../views/content/obsolete/closingNotes.html | 2 +- .../views/content/obsolete/conclusion.html | 0 .../obsolete/fairShareIndexSample.html | 0 .../content/obsolete/indexesPieSample.html | 0 .../views/content/obsolete/overview.html | 0 .../obsolete/resourcePoolRateSample.html | 0 .../views/content/obsolete/roadmap.html | 0 .../views/content/obsolete/technologies.html | 0 .../views/content/priorityIndex.html | 0 .../{ => _system}/views/content/prologue.html | 0 .../{ => _system}/views/content/reason.html | 2 +- .../views/content/totalCostIndex.html | 0 .../views/resourcePool/resourcePoolList.html | 4 +- .../resourcePool/resourcePoolManage.html | 2 +- .../views/resourcePool/resourcePoolView.html | 0 ngClient/default.aspx | 30 +- ngClient/gulpfile.js | 12 +- ngClient/images/obsolete/NewSystem.png | Bin 23171 -> 0 bytes ngClient/images/obsolete/Old vs New.pptx | Bin 34460 -> 0 bytes ngClient/images/obsolete/OldSystem.png | Bin 20146 -> 0 bytes ngClient/images/obsolete/PP_logo_h_100x26.png | Bin 2778 -> 0 bytes ngClient/images/obsolete/PP_logo_h_150x38.png | Bin 3484 -> 0 bytes ngClient/images/obsolete/PP_logo_h_200x51.png | Bin 4196 -> 0 bytes .../images/obsolete/forCrowd_logo_20x20.jpg | Bin 4341 -> 0 bytes ngClient/images/obsolete/paypal_donate.jpg | Bin 2886 -> 0 bytes ngClient/ngClient.csproj | 210 +- ngClient/views/content/home.html | 25 - 125 files changed, 120786 insertions(+), 203 deletions(-) create mode 100644 ngClient/_system/css/app.css create mode 100644 ngClient/_system/css/app.min.css create mode 100644 ngClient/_system/css/fonts/FontAwesome.otf create mode 100644 ngClient/_system/css/fonts/fontawesome-webfont.eot create mode 100644 ngClient/_system/css/fonts/fontawesome-webfont.svg create mode 100644 ngClient/_system/css/fonts/fontawesome-webfont.ttf create mode 100644 ngClient/_system/css/fonts/fontawesome-webfont.woff create mode 100644 ngClient/_system/css/fonts/fontawesome-webfont.woff2 create mode 100644 ngClient/_system/css/fonts/glyphicons-halflings-regular.eot create mode 100644 ngClient/_system/css/fonts/glyphicons-halflings-regular.svg create mode 100644 ngClient/_system/css/fonts/glyphicons-halflings-regular.ttf create mode 100644 ngClient/_system/css/fonts/glyphicons-halflings-regular.woff create mode 100644 ngClient/_system/css/fonts/glyphicons-halflings-regular.woff2 create mode 100644 ngClient/_system/css/lib/lib.css create mode 100644 ngClient/_system/css/lib/lib.min.css rename ngClient/{ => _system}/css/main.css (100%) rename ngClient/{ => _system}/images/PresentvsNew.png (100%) rename ngClient/{ => _system}/images/forCrowd_logo_34x34.jpg (100%) create mode 100644 ngClient/_system/js/app/app.js create mode 100644 ngClient/_system/js/app/app.min.js create mode 100644 ngClient/_system/js/app/app.min.js.map rename ngClient/{ => _system}/js/app/config/authorization.js (100%) rename ngClient/{ => _system}/js/app/config/breeze.js (100%) rename ngClient/{ => _system}/js/app/config/exceptionHandlerExtension.js (100%) rename ngClient/{ => _system}/js/app/config/googleAnalytics.js (100%) rename ngClient/{ => _system}/js/app/config/route.js (52%) rename ngClient/{js/app/controllers/account/accountEditController.js => _system/js/app/controllers/account/AccountEditController.js} (100%) rename ngClient/{js/app/controllers/account/addPasswordController.js => _system/js/app/controllers/account/AddPasswordController.js} (100%) rename ngClient/{js/app/controllers/account/changeEmailController.js => _system/js/app/controllers/account/ChangeEmailController.js} (95%) rename ngClient/{js/app/controllers/account/changePasswordController.js => _system/js/app/controllers/account/ChangePasswordController.js} (100%) rename ngClient/{js/app/controllers/account/confirmEmailController.js => _system/js/app/controllers/account/ConfirmEmailController.js} (100%) rename ngClient/{js/app/controllers/account/loginController.js => _system/js/app/controllers/account/LoginController.js} (100%) rename ngClient/{js/app/controllers/account/registerController.js => _system/js/app/controllers/account/RegisterController.js} (96%) rename ngClient/{ => _system}/js/app/controllers/account/ResetPasswordController.js (96%) rename ngClient/{ => _system}/js/app/controllers/content/AllInOneController.js (100%) rename ngClient/{js/app/controllers/content/basicsController.js => _system/js/app/controllers/content/BasicsController.js} (100%) rename ngClient/{ => _system}/js/app/controllers/content/DefaultController.js (96%) rename ngClient/{js/app/controllers/content/introductionController.js => _system/js/app/controllers/content/IntroductionController.js} (100%) rename ngClient/{ => _system}/js/app/controllers/content/KnowledgeIndexController.js (100%) rename ngClient/{ => _system}/js/app/controllers/content/PriorityIndexController.js (100%) rename ngClient/{ => _system}/js/app/controllers/content/TotalCostIndexController.js (100%) rename ngClient/{ => _system}/js/app/controllers/content/obsolete/FairShareIndexSampleController.js (100%) rename ngClient/{ => _system}/js/app/controllers/content/obsolete/ResourcePoolRateSampleController.js (100%) rename ngClient/{js/app/controllers/resourcePool/resourcePoolListController.js => _system/js/app/controllers/resourcePool/ResourcePoolListController.js} (100%) rename ngClient/{ => _system}/js/app/controllers/resourcePool/ResourcePoolManageController.js (97%) rename ngClient/{js/app/controllers/resourcePool/resourcePoolViewController.js => _system/js/app/controllers/resourcePool/ResourcePoolViewController.js} (96%) rename ngClient/{ => _system}/js/app/directives/resourcePoolEditor/resourcePoolEditor.css (100%) rename ngClient/{ => _system}/js/app/directives/resourcePoolEditor/resourcePoolEditor.html (100%) rename ngClient/{ => _system}/js/app/directives/resourcePoolEditor/resourcePoolEditor.js (98%) rename ngClient/{ => _system}/js/app/entities/Element.js (100%) rename ngClient/{ => _system}/js/app/entities/ElementCell.js (100%) rename ngClient/{ => _system}/js/app/entities/ElementField.js (100%) rename ngClient/{ => _system}/js/app/entities/ElementItem.js (100%) rename ngClient/{ => _system}/js/app/entities/Enums.js (100%) rename ngClient/{ => _system}/js/app/entities/ResourcePool.js (100%) rename ngClient/{ => _system}/js/app/entities/User.js (100%) rename ngClient/{ => _system}/js/app/entities/UserElementCell.js (100%) rename ngClient/{ => _system}/js/app/entities/UserElementField.js (100%) rename ngClient/{ => _system}/js/app/entities/UserResourcePool.js (100%) rename ngClient/{ => _system}/js/app/factories/applicationFactory.js (100%) rename ngClient/{ => _system}/js/app/factories/dataContext.js (100%) rename ngClient/{ => _system}/js/app/factories/entityManagerFactory.js (100%) rename ngClient/{ => _system}/js/app/factories/generated/resourcePoolFactory.js (100%) rename ngClient/{ => _system}/js/app/factories/generated/userFactory.js (100%) rename ngClient/{ => _system}/js/app/factories/locationHistory.js (95%) rename ngClient/{ => _system}/js/app/factories/logger.js (100%) rename ngClient/{ => _system}/js/app/factories/resourcePoolFactory.js (100%) rename ngClient/{ => _system}/js/app/factories/userFactory.js (100%) rename ngClient/{ => _system}/js/app/filters/angular-enum.js (100%) rename ngClient/{ => _system}/js/app/filters/angular-numberSymbol.js (100%) rename ngClient/{ => _system}/js/app/filters/angular-percentage.js (100%) rename ngClient/{ => _system}/js/app/main.js (100%) rename ngClient/{ => _system}/js/appSettings/Setup/0 Readme.txt (100%) rename ngClient/{ => _system}/js/appSettings/Setup/appSettings.js (100%) create mode 100644 ngClient/_system/js/appSettings/appSettings.js rename ngClient/{ => _system}/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js (100%) create mode 100644 ngClient/_system/js/lib/lib.js create mode 100644 ngClient/_system/js/lib/lib.min.js create mode 100644 ngClient/_system/js/lib/lib.min.js.map rename ngClient/{ => _system}/views/account/accountEdit.html (100%) rename ngClient/{ => _system}/views/account/addPassword.html (100%) rename ngClient/{ => _system}/views/account/changeEmail.html (100%) rename ngClient/{ => _system}/views/account/changePassword.html (100%) rename ngClient/{ => _system}/views/account/confirmEmail.html (100%) rename ngClient/{ => _system}/views/account/login.html (97%) rename ngClient/{ => _system}/views/account/register.html (100%) rename ngClient/{ => _system}/views/account/resetPassword.html (100%) rename ngClient/{ => _system}/views/content/404.html (100%) rename ngClient/{ => _system}/views/content/allInOne.html (100%) rename ngClient/{ => _system}/views/content/basics.html (100%) create mode 100644 ngClient/_system/views/content/home.html rename ngClient/{ => _system}/views/content/implementation.html (100%) rename ngClient/{ => _system}/views/content/introduction.html (100%) rename ngClient/{ => _system}/views/content/knowledgeIndex.html (100%) rename ngClient/{ => _system}/views/content/obsolete/closingNotes.html (99%) rename ngClient/{ => _system}/views/content/obsolete/conclusion.html (100%) rename ngClient/{ => _system}/views/content/obsolete/fairShareIndexSample.html (100%) rename ngClient/{ => _system}/views/content/obsolete/indexesPieSample.html (100%) rename ngClient/{ => _system}/views/content/obsolete/overview.html (100%) rename ngClient/{ => _system}/views/content/obsolete/resourcePoolRateSample.html (100%) rename ngClient/{ => _system}/views/content/obsolete/roadmap.html (100%) rename ngClient/{ => _system}/views/content/obsolete/technologies.html (100%) rename ngClient/{ => _system}/views/content/priorityIndex.html (100%) rename ngClient/{ => _system}/views/content/prologue.html (100%) rename ngClient/{ => _system}/views/content/reason.html (96%) rename ngClient/{ => _system}/views/content/totalCostIndex.html (100%) rename ngClient/{ => _system}/views/resourcePool/resourcePoolList.html (78%) rename ngClient/{ => _system}/views/resourcePool/resourcePoolManage.html (99%) rename ngClient/{ => _system}/views/resourcePool/resourcePoolView.html (100%) delete mode 100644 ngClient/images/obsolete/NewSystem.png delete mode 100644 ngClient/images/obsolete/Old vs New.pptx delete mode 100644 ngClient/images/obsolete/OldSystem.png delete mode 100644 ngClient/images/obsolete/PP_logo_h_100x26.png delete mode 100644 ngClient/images/obsolete/PP_logo_h_150x38.png delete mode 100644 ngClient/images/obsolete/PP_logo_h_200x51.png delete mode 100644 ngClient/images/obsolete/forCrowd_logo_20x20.jpg delete mode 100644 ngClient/images/obsolete/paypal_donate.jpg delete mode 100644 ngClient/views/content/home.html diff --git a/CHANGELOG.md b/CHANGELOG.md index d901558e9..13127afd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ### Changelog +**0.49.0** + +* ngClient - _system folder +https://github.com/forCrowd/WealthEconomy/issues/18 + **0.48.0** * Reset / Forgot Password diff --git a/SolutionItems/Documents/Content Notes.txt b/SolutionItems/Documents/Content Notes.txt index e3bd9910b..d9afcf52c 100644 --- a/SolutionItems/Documents/Content Notes.txt +++ b/SolutionItems/Documents/Content Notes.txt @@ -6,14 +6,15 @@ crowd: individuals that work on a certain subject.. --- # Articles +. formula calculation . capitalism is dead but why can't we get rid of it? . organization.json -. formula calculation . Difficulty of lying - Blue polar bear . TEDs http://www.ted.com/talks/audrey_choi_how_to_make_a_profit_while_making_a_difference - not very strong but.. # Description +Alt: Measuring the goodness New: An experimental, open source crowd investment platform Old: An experimental resource management system that aims to provide a more sustainable and productive economic model diff --git a/SolutionItems/Documents/Todo.md b/SolutionItems/Documents/Todo.md index d75127d0a..e24754831 100644 --- a/SolutionItems/Documents/Todo.md +++ b/SolutionItems/Documents/Todo.md @@ -1,10 +1,7 @@ *** HOT *** -users can enter what they want, except.. -reserved ones will start with "_" ? -or "_system" | "sys" | "_sys" ? +send exception to server in 404 case? ---- design for forcrowd? http://osfund.co/ Find a designer! Ozgur's Ali | http://foundry.mediumra.re/variant/builder.html @@ -88,6 +85,8 @@ Nadia's . From F18 slides: check the grants --- +rating UI: Current ratings are from 0 to 100, could to 5, 10 or 1000 as well? + IMPORTANT BUT LATER! do we correctly update RatingCount (probably yes..)? but do we update other computed values (resourcepooltotal, count, numericvaluetotal, count, fieldratingtotal, count) correctly? @@ -122,6 +121,8 @@ objects vs entities add newly created cmrps to fetchedList in cmrpfactory - and don't use newlyCreated flag + + resourcepool - resourcepoolratetotal, count, ratingcount never null elementfiel - indexratingtotal, count never null elementcell - numericvaluecount never null - ONLY numericvaluetotal CAN BE NULL? which can be changed to NOT NULL! diff --git a/SolutionItems/Properties/AssemblyInfo.cs b/SolutionItems/Properties/AssemblyInfo.cs index 53adfde3f..53edebeff 100644 --- a/SolutionItems/Properties/AssemblyInfo.cs +++ b/SolutionItems/Properties/AssemblyInfo.cs @@ -30,5 +30,5 @@ // // AssemblyFileVersion is not in use for the moment // -[assembly: AssemblyVersion("0.48.0")] +[assembly: AssemblyVersion("0.49.0")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ngClient/_system/css/app.css b/ngClient/_system/css/app.css new file mode 100644 index 000000000..a6799622a --- /dev/null +++ b/ngClient/_system/css/app.css @@ -0,0 +1,224 @@ +/* Brand styling - Probably css class names can be better, parent child structure? */ +.brandLink, +.brandLink > a, +.brandLink > a:focus, +.brandLink > a:hover { + text-decoration: none; + line-height: 1em; +} + +.brandLinkImage { + margin-right: 10px; + float: left; +} + +.brandLinkText { + font-family: 'Century Gothic'; + text-decoration: none; + line-height: 1em; +} + +.brandLinkPrimary { + color: #b08b5f; + font-size: 16px; +} + +.brandLinkSecondary { + color: #2B2A28; + font-size: 11px; +} + +body { + font-size: 15px; + padding-top: 50px; + padding-bottom: 20px; +} + +/* Set padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; +} + +/* Set width on the form input elements since they're 100% wide by default */ +input, +select, +textarea { + max-width: 280px; +} + +.bg-info { + padding: 15px; +} + +ul.bg-info { + padding-left: 25px; +} + +.btn-xs { + font-size: 10px; + height: 18px; + width: 18px; +} + +/* Callout Begin */ + +.bs-callout { + padding: 20px; + margin: 20px 0; + border: 1px solid #eee; + border-left-width: 5px; + border-radius: 3px; +} + + .bs-callout h4 { + margin-top: 0; + margin-bottom: 5px; + } + + .bs-callout p:last-child { + margin-bottom: 0; + } + + .bs-callout code { + border-radius: 3px; + } + + .bs-callout + .bs-callout { + margin-top: -5px; + } + +.bs-callout-danger { + border-left-color: #d9534f; +} + + .bs-callout-danger h4 { + color: #d9534f; + } + +.bs-callout-warning { + border-left-color: #f0ad4e; +} + + .bs-callout-warning h4 { + color: #f0ad4e; + } + +.bs-callout-info { + border-left-color: #5bc0de; +} + + .bs-callout-info h4 { + color: #5bc0de; + } + +/* Callout End */ + +/* styles for validation helpers */ +.field-validation-error { + color: #b94a48; +} + +.field-validation-valid { + display: none; +} + +input.input-validation-error { + border: 1px solid #b94a48; +} + +input[type="checkbox"].input-validation-error { + border: 0 none; +} + +.validation-summary-errors { + color: #b94a48; +} + +.validation-summary-valid { + display: none; +} + +/* Project level custom helpers / SH 24 Jan. '14 */ +.buffer-top { + margin-top: 15px; +} + +.buffer-left { + margin-left: 15px; +} + +.vcenter { + display: inline-block; + vertical-align: middle; + float: none; +} +.resourcePoolEditor { + font-family: Tahoma; + /*font-family: Verdana, Geneva, Tahoma, sans-serif;*/ + font-size: 10px; + padding: 1.5em 0; +} + +.resourcePoolEditor .panel-title { + font-size: 18px; + line-height: 2em; +} + +.resourcePoolTable { + /*table-layout: fixed;*/ +} + + .resourcePoolTable > thead > tr > th { + vertical-align: top; + } + + .resourcePoolTable > thead > tr > th, + .resourcePoolTable > thead > tr > td, + .resourcePoolTable > tbody > tr > td, + .resourcePoolTable > tfoot > tr > td { + line-height: 2em; + min-width: 85px; + overflow: hidden; /* Hide text outside the cell */ + padding: 3px; + } + + .resourcePoolTable .fixedWidth35Cell { + display: inline-block; + width: 35px; + } + + .resourcePoolTable .fixedWidth45Cell { + display: inline-block; + width: 45px; + } + + .resourcePoolTable .infoText { + margin-left: 2px; + } + + .resourcePoolTable .incomeStatusLow { + color: #a94442; + } + + .resourcePoolTable .incomeStatusAverage { + /* color: ? */ + } + + .resourcePoolTable .incomeStatusHigh { + color: #3c763d; + } + +.label-as-on-badge { + border-radius: 1em; + background-color: #3c763d; + cursor: pointer; + margin-left: 5px; +} + +.label-as-off-badge { + border-radius: 1em; + background-color: #a94442; + cursor: pointer; + margin-left: 5px; +} diff --git a/ngClient/_system/css/app.min.css b/ngClient/_system/css/app.min.css new file mode 100644 index 000000000..b93ef7794 --- /dev/null +++ b/ngClient/_system/css/app.min.css @@ -0,0 +1 @@ +.brandLink,.brandLink>a,.brandLink>a:focus,.brandLink>a:hover,.brandLinkText{text-decoration:none;line-height:1em}.field-validation-valid,.validation-summary-valid{display:none}.brandLinkImage{margin-right:10px;float:left}.brandLinkText{font-family:'Century Gothic'}.brandLinkPrimary{color:#b08b5f;font-size:16px}.brandLinkSecondary{color:#2B2A28;font-size:11px}body{font-size:15px;padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.bg-info{padding:15px}ul.bg-info{padding-left:25px}.btn-xs{font-size:10px;height:18px;width:18px}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-danger{border-left-color:#d9534f}.bs-callout-danger h4{color:#d9534f}.bs-callout-warning{border-left-color:#f0ad4e}.bs-callout-warning h4{color:#f0ad4e}.bs-callout-info{border-left-color:#5bc0de}.bs-callout-info h4{color:#5bc0de}.field-validation-error,.validation-summary-errors{color:#b94a48}input.input-validation-error{border:1px solid #b94a48}input[type=checkbox].input-validation-error{border:0}.buffer-top{margin-top:15px}.buffer-left{margin-left:15px}.vcenter{display:inline-block;vertical-align:middle;float:none}.resourcePoolEditor{font-family:Tahoma;font-size:10px;padding:1.5em 0}.resourcePoolEditor .panel-title{font-size:18px;line-height:2em}.resourcePoolTable>thead>tr>th{vertical-align:top}.resourcePoolTable>tbody>tr>td,.resourcePoolTable>tfoot>tr>td,.resourcePoolTable>thead>tr>td,.resourcePoolTable>thead>tr>th{line-height:2em;min-width:85px;overflow:hidden;padding:3px}.resourcePoolTable .fixedWidth35Cell{display:inline-block;width:35px}.resourcePoolTable .fixedWidth45Cell{display:inline-block;width:45px}.resourcePoolTable .infoText{margin-left:2px}.label-as-off-badge,.label-as-on-badge{border-radius:1em;cursor:pointer;margin-left:5px}.resourcePoolTable .incomeStatusLow{color:#a94442}.resourcePoolTable .incomeStatusHigh{color:#3c763d}.label-as-on-badge{background-color:#3c763d}.label-as-off-badge{background-color:#a94442} \ No newline at end of file diff --git a/ngClient/_system/css/fonts/FontAwesome.otf b/ngClient/_system/css/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680 GIT binary patch literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 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 literal 0 HcmV?d00001 diff --git a/ngClient/_system/css/fonts/fontawesome-webfont.svg b/ngClient/_system/css/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..d05688e9e --- /dev/null +++ b/ngClient/_system/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,655 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ngClient/_system/css/fonts/fontawesome-webfont.ttf b/ngClient/_system/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..26dea7951a73079223b50653c455c5adf46a4648 GIT binary patch literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ngClient/_system/css/fonts/glyphicons-halflings-regular.ttf b/ngClient/_system/css/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 G`u_lkUM?>H literal 0 HcmV?d00001 diff --git a/ngClient/_system/css/fonts/glyphicons-halflings-regular.woff2 b/ngClient/_system/css/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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 literal 0 HcmV?d00001 diff --git a/ngClient/_system/css/lib/lib.css b/ngClient/_system/css/lib/lib.css new file mode 100644 index 000000000..764515bcf --- /dev/null +++ b/ngClient/_system/css/lib/lib.css @@ -0,0 +1,9277 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ + +/*! + * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.5.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} + +/* + * Social Buttons for Bootstrap + * + * Copyright 2013-2015 Panayiotis Lipiridis + * Licensed under the MIT License + * + * https://github.com/lipis/bootstrap-social + */ + +.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} +.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} +.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} +.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} +.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} +.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} +.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} +.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} +.btn-social-icon>:first-child{border:none;text-align:center;width:100% !important} +.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0} +.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0} +.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0} +.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} +.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} +.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active:hover,.btn-adn.active:hover,.open>.dropdown-toggle.btn-adn:hover,.btn-adn:active:focus,.btn-adn.active:focus,.open>.dropdown-toggle.btn-adn:focus,.btn-adn:active.focus,.btn-adn.active.focus,.open>.dropdown-toggle.btn-adn.focus{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,0.2)} +.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none} +.btn-adn.disabled,.btn-adn[disabled],fieldset[disabled] .btn-adn,.btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled.focus,.btn-adn[disabled].focus,fieldset[disabled] .btn-adn.focus,.btn-adn.disabled:active,.btn-adn[disabled]:active,fieldset[disabled] .btn-adn:active,.btn-adn.disabled.active,.btn-adn[disabled].active,fieldset[disabled] .btn-adn.active{background-color:#d87a68;border-color:rgba(0,0,0,0.2)} +.btn-adn .badge{color:#d87a68;background-color:#fff} +.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} +.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} +.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active:hover,.btn-bitbucket.active:hover,.open>.dropdown-toggle.btn-bitbucket:hover,.btn-bitbucket:active:focus,.btn-bitbucket.active:focus,.open>.dropdown-toggle.btn-bitbucket:focus,.btn-bitbucket:active.focus,.btn-bitbucket.active.focus,.open>.dropdown-toggle.btn-bitbucket.focus{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,0.2)} +.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none} +.btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled.focus,.btn-bitbucket[disabled].focus,fieldset[disabled] .btn-bitbucket.focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2)} +.btn-bitbucket .badge{color:#205081;background-color:#fff} +.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} +.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} +.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active:hover,.btn-dropbox.active:hover,.open>.dropdown-toggle.btn-dropbox:hover,.btn-dropbox:active:focus,.btn-dropbox.active:focus,.open>.dropdown-toggle.btn-dropbox:focus,.btn-dropbox:active.focus,.btn-dropbox.active.focus,.open>.dropdown-toggle.btn-dropbox.focus{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,0.2)} +.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none} +.btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled.focus,.btn-dropbox[disabled].focus,fieldset[disabled] .btn-dropbox.focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2)} +.btn-dropbox .badge{color:#1087dd;background-color:#fff} +.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} +.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} +.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active:hover,.btn-facebook.active:hover,.open>.dropdown-toggle.btn-facebook:hover,.btn-facebook:active:focus,.btn-facebook.active:focus,.open>.dropdown-toggle.btn-facebook:focus,.btn-facebook:active.focus,.btn-facebook.active.focus,.open>.dropdown-toggle.btn-facebook.focus{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,0.2)} +.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none} +.btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled.focus,.btn-facebook[disabled].focus,fieldset[disabled] .btn-facebook.focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2)} +.btn-facebook .badge{color:#3b5998;background-color:#fff} +.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} +.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} +.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active:hover,.btn-flickr.active:hover,.open>.dropdown-toggle.btn-flickr:hover,.btn-flickr:active:focus,.btn-flickr.active:focus,.open>.dropdown-toggle.btn-flickr:focus,.btn-flickr:active.focus,.btn-flickr.active.focus,.open>.dropdown-toggle.btn-flickr.focus{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,0.2)} +.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none} +.btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled.focus,.btn-flickr[disabled].focus,fieldset[disabled] .btn-flickr.focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2)} +.btn-flickr .badge{color:#ff0084;background-color:#fff} +.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} +.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} +.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active:hover,.btn-foursquare.active:hover,.open>.dropdown-toggle.btn-foursquare:hover,.btn-foursquare:active:focus,.btn-foursquare.active:focus,.open>.dropdown-toggle.btn-foursquare:focus,.btn-foursquare:active.focus,.btn-foursquare.active.focus,.open>.dropdown-toggle.btn-foursquare.focus{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,0.2)} +.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none} +.btn-foursquare.disabled,.btn-foursquare[disabled],fieldset[disabled] .btn-foursquare,.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled.focus,.btn-foursquare[disabled].focus,fieldset[disabled] .btn-foursquare.focus,.btn-foursquare.disabled:active,.btn-foursquare[disabled]:active,fieldset[disabled] .btn-foursquare:active,.btn-foursquare.disabled.active,.btn-foursquare[disabled].active,fieldset[disabled] .btn-foursquare.active{background-color:#f94877;border-color:rgba(0,0,0,0.2)} +.btn-foursquare .badge{color:#f94877;background-color:#fff} +.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} +.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} +.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active:hover,.btn-github.active:hover,.open>.dropdown-toggle.btn-github:hover,.btn-github:active:focus,.btn-github.active:focus,.open>.dropdown-toggle.btn-github:focus,.btn-github:active.focus,.btn-github.active.focus,.open>.dropdown-toggle.btn-github.focus{color:#fff;background-color:#191919;border-color:rgba(0,0,0,0.2)} +.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none} +.btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled.focus,.btn-github[disabled].focus,fieldset[disabled] .btn-github.focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444;border-color:rgba(0,0,0,0.2)} +.btn-github .badge{color:#444;background-color:#fff} +.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} +.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} +.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active:hover,.btn-google.active:hover,.open>.dropdown-toggle.btn-google:hover,.btn-google:active:focus,.btn-google.active:focus,.open>.dropdown-toggle.btn-google:focus,.btn-google:active.focus,.btn-google.active.focus,.open>.dropdown-toggle.btn-google.focus{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,0.2)} +.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none} +.btn-google.disabled,.btn-google[disabled],fieldset[disabled] .btn-google,.btn-google.disabled:hover,.btn-google[disabled]:hover,fieldset[disabled] .btn-google:hover,.btn-google.disabled:focus,.btn-google[disabled]:focus,fieldset[disabled] .btn-google:focus,.btn-google.disabled.focus,.btn-google[disabled].focus,fieldset[disabled] .btn-google.focus,.btn-google.disabled:active,.btn-google[disabled]:active,fieldset[disabled] .btn-google:active,.btn-google.disabled.active,.btn-google[disabled].active,fieldset[disabled] .btn-google.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)} +.btn-google .badge{color:#dd4b39;background-color:#fff} +.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} +.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} +.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active:hover,.btn-instagram.active:hover,.open>.dropdown-toggle.btn-instagram:hover,.btn-instagram:active:focus,.btn-instagram.active:focus,.open>.dropdown-toggle.btn-instagram:focus,.btn-instagram:active.focus,.btn-instagram.active.focus,.open>.dropdown-toggle.btn-instagram.focus{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,0.2)} +.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none} +.btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled.focus,.btn-instagram[disabled].focus,fieldset[disabled] .btn-instagram.focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2)} +.btn-instagram .badge{color:#3f729b;background-color:#fff} +.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} +.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} +.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active:hover,.btn-linkedin.active:hover,.open>.dropdown-toggle.btn-linkedin:hover,.btn-linkedin:active:focus,.btn-linkedin.active:focus,.open>.dropdown-toggle.btn-linkedin:focus,.btn-linkedin:active.focus,.btn-linkedin.active.focus,.open>.dropdown-toggle.btn-linkedin.focus{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,0.2)} +.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none} +.btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled.focus,.btn-linkedin[disabled].focus,fieldset[disabled] .btn-linkedin.focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2)} +.btn-linkedin .badge{color:#007bb6;background-color:#fff} +.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} +.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} +.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active:hover,.btn-microsoft.active:hover,.open>.dropdown-toggle.btn-microsoft:hover,.btn-microsoft:active:focus,.btn-microsoft.active:focus,.open>.dropdown-toggle.btn-microsoft:focus,.btn-microsoft:active.focus,.btn-microsoft.active.focus,.open>.dropdown-toggle.btn-microsoft.focus{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,0.2)} +.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none} +.btn-microsoft.disabled,.btn-microsoft[disabled],fieldset[disabled] .btn-microsoft,.btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled.focus,.btn-microsoft[disabled].focus,fieldset[disabled] .btn-microsoft.focus,.btn-microsoft.disabled:active,.btn-microsoft[disabled]:active,fieldset[disabled] .btn-microsoft:active,.btn-microsoft.disabled.active,.btn-microsoft[disabled].active,fieldset[disabled] .btn-microsoft.active{background-color:#2672ec;border-color:rgba(0,0,0,0.2)} +.btn-microsoft .badge{color:#2672ec;background-color:#fff} +.btn-odnoklassniki{color:#fff;background-color:#f4731c;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:focus,.btn-odnoklassniki.focus{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)} +.btn-odnoklassniki:hover{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)} +.btn-odnoklassniki:active,.btn-odnoklassniki.active,.open>.dropdown-toggle.btn-odnoklassniki{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:active:hover,.btn-odnoklassniki.active:hover,.open>.dropdown-toggle.btn-odnoklassniki:hover,.btn-odnoklassniki:active:focus,.btn-odnoklassniki.active:focus,.open>.dropdown-toggle.btn-odnoklassniki:focus,.btn-odnoklassniki:active.focus,.btn-odnoklassniki.active.focus,.open>.dropdown-toggle.btn-odnoklassniki.focus{color:#fff;background-color:#b14c09;border-color:rgba(0,0,0,0.2)} +.btn-odnoklassniki:active,.btn-odnoklassniki.active,.open>.dropdown-toggle.btn-odnoklassniki{background-image:none} +.btn-odnoklassniki.disabled,.btn-odnoklassniki[disabled],fieldset[disabled] .btn-odnoklassniki,.btn-odnoklassniki.disabled:hover,.btn-odnoklassniki[disabled]:hover,fieldset[disabled] .btn-odnoklassniki:hover,.btn-odnoklassniki.disabled:focus,.btn-odnoklassniki[disabled]:focus,fieldset[disabled] .btn-odnoklassniki:focus,.btn-odnoklassniki.disabled.focus,.btn-odnoklassniki[disabled].focus,fieldset[disabled] .btn-odnoklassniki.focus,.btn-odnoklassniki.disabled:active,.btn-odnoklassniki[disabled]:active,fieldset[disabled] .btn-odnoklassniki:active,.btn-odnoklassniki.disabled.active,.btn-odnoklassniki[disabled].active,fieldset[disabled] .btn-odnoklassniki.active{background-color:#f4731c;border-color:rgba(0,0,0,0.2)} +.btn-odnoklassniki .badge{color:#f4731c;background-color:#fff} +.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} +.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} +.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active:hover,.btn-openid.active:hover,.open>.dropdown-toggle.btn-openid:hover,.btn-openid:active:focus,.btn-openid.active:focus,.open>.dropdown-toggle.btn-openid:focus,.btn-openid:active.focus,.btn-openid.active.focus,.open>.dropdown-toggle.btn-openid.focus{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2)} +.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none} +.btn-openid.disabled,.btn-openid[disabled],fieldset[disabled] .btn-openid,.btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled.focus,.btn-openid[disabled].focus,fieldset[disabled] .btn-openid.focus,.btn-openid.disabled:active,.btn-openid[disabled]:active,fieldset[disabled] .btn-openid:active,.btn-openid.disabled.active,.btn-openid[disabled].active,fieldset[disabled] .btn-openid.active{background-color:#f7931e;border-color:rgba(0,0,0,0.2)} +.btn-openid .badge{color:#f7931e;background-color:#fff} +.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} +.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} +.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active:hover,.btn-pinterest.active:hover,.open>.dropdown-toggle.btn-pinterest:hover,.btn-pinterest:active:focus,.btn-pinterest.active:focus,.open>.dropdown-toggle.btn-pinterest:focus,.btn-pinterest:active.focus,.btn-pinterest.active.focus,.open>.dropdown-toggle.btn-pinterest.focus{color:#fff;background-color:#801419;border-color:rgba(0,0,0,0.2)} +.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none} +.btn-pinterest.disabled,.btn-pinterest[disabled],fieldset[disabled] .btn-pinterest,.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled.focus,.btn-pinterest[disabled].focus,fieldset[disabled] .btn-pinterest.focus,.btn-pinterest.disabled:active,.btn-pinterest[disabled]:active,fieldset[disabled] .btn-pinterest:active,.btn-pinterest.disabled.active,.btn-pinterest[disabled].active,fieldset[disabled] .btn-pinterest.active{background-color:#cb2027;border-color:rgba(0,0,0,0.2)} +.btn-pinterest .badge{color:#cb2027;background-color:#fff} +.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} +.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} +.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active:hover,.btn-reddit.active:hover,.open>.dropdown-toggle.btn-reddit:hover,.btn-reddit:active:focus,.btn-reddit.active:focus,.open>.dropdown-toggle.btn-reddit:focus,.btn-reddit:active.focus,.btn-reddit.active.focus,.open>.dropdown-toggle.btn-reddit.focus{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,0.2)} +.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none} +.btn-reddit.disabled,.btn-reddit[disabled],fieldset[disabled] .btn-reddit,.btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled.focus,.btn-reddit[disabled].focus,fieldset[disabled] .btn-reddit.focus,.btn-reddit.disabled:active,.btn-reddit[disabled]:active,fieldset[disabled] .btn-reddit:active,.btn-reddit.disabled.active,.btn-reddit[disabled].active,fieldset[disabled] .btn-reddit.active{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)} +.btn-reddit .badge{color:#eff7ff;background-color:#000} +.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} +.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} +.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active:hover,.btn-soundcloud.active:hover,.open>.dropdown-toggle.btn-soundcloud:hover,.btn-soundcloud:active:focus,.btn-soundcloud.active:focus,.open>.dropdown-toggle.btn-soundcloud:focus,.btn-soundcloud:active.focus,.btn-soundcloud.active.focus,.open>.dropdown-toggle.btn-soundcloud.focus{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,0.2)} +.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none} +.btn-soundcloud.disabled,.btn-soundcloud[disabled],fieldset[disabled] .btn-soundcloud,.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled.focus,.btn-soundcloud[disabled].focus,fieldset[disabled] .btn-soundcloud.focus,.btn-soundcloud.disabled:active,.btn-soundcloud[disabled]:active,fieldset[disabled] .btn-soundcloud:active,.btn-soundcloud.disabled.active,.btn-soundcloud[disabled].active,fieldset[disabled] .btn-soundcloud.active{background-color:#f50;border-color:rgba(0,0,0,0.2)} +.btn-soundcloud .badge{color:#f50;background-color:#fff} +.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} +.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} +.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active:hover,.btn-tumblr.active:hover,.open>.dropdown-toggle.btn-tumblr:hover,.btn-tumblr:active:focus,.btn-tumblr.active:focus,.open>.dropdown-toggle.btn-tumblr:focus,.btn-tumblr:active.focus,.btn-tumblr.active.focus,.open>.dropdown-toggle.btn-tumblr.focus{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,0.2)} +.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none} +.btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled.focus,.btn-tumblr[disabled].focus,fieldset[disabled] .btn-tumblr.focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2)} +.btn-tumblr .badge{color:#2c4762;background-color:#fff} +.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} +.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} +.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active:hover,.btn-twitter.active:hover,.open>.dropdown-toggle.btn-twitter:hover,.btn-twitter:active:focus,.btn-twitter.active:focus,.open>.dropdown-toggle.btn-twitter:focus,.btn-twitter:active.focus,.btn-twitter.active.focus,.open>.dropdown-toggle.btn-twitter.focus{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,0.2)} +.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none} +.btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled.focus,.btn-twitter[disabled].focus,fieldset[disabled] .btn-twitter.focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2)} +.btn-twitter .badge{color:#55acee;background-color:#fff} +.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} +.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} +.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active:hover,.btn-vimeo.active:hover,.open>.dropdown-toggle.btn-vimeo:hover,.btn-vimeo:active:focus,.btn-vimeo.active:focus,.open>.dropdown-toggle.btn-vimeo:focus,.btn-vimeo:active.focus,.btn-vimeo.active.focus,.open>.dropdown-toggle.btn-vimeo.focus{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,0.2)} +.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none} +.btn-vimeo.disabled,.btn-vimeo[disabled],fieldset[disabled] .btn-vimeo,.btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled.focus,.btn-vimeo[disabled].focus,fieldset[disabled] .btn-vimeo.focus,.btn-vimeo.disabled:active,.btn-vimeo[disabled]:active,fieldset[disabled] .btn-vimeo:active,.btn-vimeo.disabled.active,.btn-vimeo[disabled].active,fieldset[disabled] .btn-vimeo.active{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)} +.btn-vimeo .badge{color:#1ab7ea;background-color:#fff} +.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} +.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} +.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active:hover,.btn-vk.active:hover,.open>.dropdown-toggle.btn-vk:hover,.btn-vk:active:focus,.btn-vk.active:focus,.open>.dropdown-toggle.btn-vk:focus,.btn-vk:active.focus,.btn-vk.active.focus,.open>.dropdown-toggle.btn-vk.focus{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,0.2)} +.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none} +.btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled.focus,.btn-vk[disabled].focus,fieldset[disabled] .btn-vk.focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2)} +.btn-vk .badge{color:#587ea3;background-color:#fff} +.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} +.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} +.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active:hover,.btn-yahoo.active:hover,.open>.dropdown-toggle.btn-yahoo:hover,.btn-yahoo:active:focus,.btn-yahoo.active:focus,.open>.dropdown-toggle.btn-yahoo:focus,.btn-yahoo:active.focus,.btn-yahoo.active.focus,.open>.dropdown-toggle.btn-yahoo.focus{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,0.2)} +.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none} +.btn-yahoo.disabled,.btn-yahoo[disabled],fieldset[disabled] .btn-yahoo,.btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled.focus,.btn-yahoo[disabled].focus,fieldset[disabled] .btn-yahoo.focus,.btn-yahoo.disabled:active,.btn-yahoo[disabled]:active,fieldset[disabled] .btn-yahoo:active,.btn-yahoo.disabled.active,.btn-yahoo[disabled].active,fieldset[disabled] .btn-yahoo.active{background-color:#720e9e;border-color:rgba(0,0,0,0.2)} +.btn-yahoo .badge{color:#720e9e;background-color:#fff} + +/* + * CSS to accompany the breeze.directives + * such as breeze.directives.js + * + * v.1.3.10 + * + * Copyright 2015 IdeaBlade, Inc. All Rights Reserved. + * Licensed under the MIT License + * http://opensource.org/licenses/mit-license.php + * Author: Ward Bell + */ + +/*#region validation */ +.icon-asterisk-invalid { + color: red; + margin: 0.2em; + font-size: 2em; + font-weight: bold; +} + +.z-required { + margin: 0.2em; + position: relative; +} +input + .z-decorator > .z-required { + top: 0.4em; +} + +select + .z-decorator > .z-required { + top: 0.2em; +} + +.invalid { + position: absolute; + display: none; + -moz-min-width: 200px; + -ms-min-width: 200px; + -o-min-width: 200px; + -webkit-min-width: 200px; + min-width: 200px; + min-height: 20px; + max-width: 450px; + max-height: 40px; +} + +input:invalid, +textarea:invalid, +select:invalid { + border: red solid 1px !important; + border-left: 5px solid red !important; +} +span.z-decorator span.invalid, + input:invalid + .z-decorator > .invalid, + textarea:invalid + .z-decorator > .invalid, + select:invalid + .z-decorator > .invalid { + visibility: visible; + display: inline-block; + background-color: rgb(189, 54, 47); + margin: 0.3em 0 0 1em; + padding: 4px 10px; + -ms-border-radius: 3px 3px 3px 3px !important; + border-radius: 3px 3px 3px 3px !important; + background-position: 15px center; + background-repeat: no-repeat; + -webkit-box-shadow: 0 0 12px #999999; + -ms-box-shadow: 0 0 12px #999999; + box-shadow: 0 0 12px #999999; + color: #ffffff; + -ms-opacity: 0.8; + opacity: 0.8; + z-index: 20; + } + + select:invalid + .z-decorator > .invalid { + margin: 0.1em 0 0 1em; + } +.invalid > i { + margin-right: 8px; +} +/*#endregion */ + +.toast-title { + font-weight: bold; +} +.toast-message { + -ms-word-wrap: break-word; + word-wrap: break-word; +} +.toast-message a, +.toast-message label { + color: #ffffff; +} +.toast-message a:hover { + color: #cccccc; + text-decoration: none; +} +.toast-close-button { + position: relative; + right: -0.3em; + top: -0.3em; + float: right; + font-size: 20px; + font-weight: bold; + color: #ffffff; + -webkit-text-shadow: 0 1px 0 #ffffff; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.8; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + filter: alpha(opacity=80); +} +.toast-close-button:hover, +.toast-close-button:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40); + filter: alpha(opacity=40); +} +/*Additional properties for button version + iOS requires the button element instead of an anchor tag. + If you want the anchor version, it requires `href="#"`.*/ +button.toast-close-button { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.toast-top-center { + top: 0; + right: 0; + width: 100%; +} +.toast-bottom-center { + bottom: 0; + right: 0; + width: 100%; +} +.toast-top-full-width { + top: 0; + right: 0; + width: 100%; +} +.toast-bottom-full-width { + bottom: 0; + right: 0; + width: 100%; +} +.toast-top-left { + top: 12px; + left: 12px; +} +.toast-top-right { + top: 12px; + right: 12px; +} +.toast-bottom-right { + right: 12px; + bottom: 12px; +} +.toast-bottom-left { + bottom: 12px; + left: 12px; +} +#toast-container { + position: fixed; + z-index: 999999; + pointer-events: none; + /*overrides*/ +} +#toast-container * { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +#toast-container > div { + position: relative; + pointer-events: auto; + overflow: hidden; + margin: 0 0 6px; + padding: 15px 15px 15px 50px; + width: 300px; + -moz-border-radius: 3px 3px 3px 3px; + -webkit-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; + background-position: 15px center; + background-repeat: no-repeat; + -moz-box-shadow: 0 0 12px #999999; + -webkit-box-shadow: 0 0 12px #999999; + box-shadow: 0 0 12px #999999; + color: #ffffff; + opacity: 0.8; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); + filter: alpha(opacity=80); +} +#toast-container > :hover { + -moz-box-shadow: 0 0 12px #000000; + -webkit-box-shadow: 0 0 12px #000000; + box-shadow: 0 0 12px #000000; + opacity: 1; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + filter: alpha(opacity=100); + cursor: pointer; +} +#toast-container > .toast-info { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important; +} +#toast-container > .toast-error { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important; +} +#toast-container > .toast-success { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important; +} +#toast-container > .toast-warning { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important; +} +#toast-container.toast-top-center > div, +#toast-container.toast-bottom-center > div { + width: 300px; + margin-left: auto; + margin-right: auto; +} +#toast-container.toast-top-full-width > div, +#toast-container.toast-bottom-full-width > div { + width: 96%; + margin-left: auto; + margin-right: auto; +} +.toast { + background-color: #030303; +} +.toast-success { + background-color: #51a351; +} +.toast-error { + background-color: #bd362f; +} +.toast-info { + background-color: #2f96b4; +} +.toast-warning { + background-color: #f89406; +} +.toast-progress { + position: absolute; + left: 0; + bottom: 0; + height: 4px; + background-color: #000000; + opacity: 0.4; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40); + filter: alpha(opacity=40); +} +/*Responsive Design*/ +@media all and (max-width: 240px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 11em; + } + #toast-container .toast-close-button { + right: -0.2em; + top: -0.2em; + } +} +@media all and (min-width: 241px) and (max-width: 480px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 18em; + } + #toast-container .toast-close-button { + right: -0.2em; + top: -0.2em; + } +} +@media all and (min-width: 481px) and (max-width: 768px) { + #toast-container > div { + padding: 15px 15px 15px 50px; + width: 25em; + } +} diff --git a/ngClient/_system/css/lib/lib.min.css b/ngClient/_system/css/lib/lib.min.css new file mode 100644 index 000000000..17a843476 --- /dev/null +++ b/ngClient/_system/css/lib/lib.min.css @@ -0,0 +1,8 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}#toast-container,.form-control-feedback,a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.fa,.glyphicon{-moz-osx-font-smoothing:grayscale}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.dropdown-menu,.modal-content{-webkit-background-clip:padding-box}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.invalid,.well{min-height:20px}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;line-break:auto;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;text-align:left;text-align:start;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;text-align:left;text-align:start;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.6);text-align:center}.btn-social,.btn-social-icon{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.btn-adn.active,.btn-adn:active,.btn-bitbucket.active,.btn-bitbucket:active,.btn-dropbox.active,.btn-dropbox:active,.btn-facebook.active,.btn-facebook:active,.btn-flickr.active,.btn-flickr:active,.btn-foursquare.active,.btn-foursquare:active,.btn-github.active,.btn-github:active,.btn-google.active,.btn-google:active,.btn-instagram.active,.btn-instagram:active,.btn-linkedin.active,.btn-linkedin:active,.btn-odnoklassniki.active,.btn-odnoklassniki:active,.btn-openid.active,.btn-openid:active,.btn-pinterest.active,.btn-pinterest:active,.btn-reddit.active,.btn-reddit:active,.btn-soundcloud.active,.btn-soundcloud:active,.btn-tumblr.active,.btn-tumblr:active,.btn-twitter.active,.btn-twitter:active,.btn-vimeo.active,.btn-vimeo:active,.btn-vk.active,.btn-vk:active,.btn-yahoo.active,.btn-yahoo:active,.open>.dropdown-toggle.btn-adn,.open>.dropdown-toggle.btn-bitbucket,.open>.dropdown-toggle.btn-dropbox,.open>.dropdown-toggle.btn-facebook,.open>.dropdown-toggle.btn-flickr,.open>.dropdown-toggle.btn-foursquare,.open>.dropdown-toggle.btn-github,.open>.dropdown-toggle.btn-google,.open>.dropdown-toggle.btn-instagram,.open>.dropdown-toggle.btn-linkedin,.open>.dropdown-toggle.btn-odnoklassniki,.open>.dropdown-toggle.btn-openid,.open>.dropdown-toggle.btn-pinterest,.open>.dropdown-toggle.btn-reddit,.open>.dropdown-toggle.btn-soundcloud,.open>.dropdown-toggle.btn-tumblr,.open>.dropdown-toggle.btn-twitter,.open>.dropdown-toggle.btn-vimeo,.open>.dropdown-toggle.btn-vk,.open>.dropdown-toggle.btn-yahoo{background-image:none}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.fa,.fa-stack{display:inline-block}/*! + * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.5.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff2?v=4.5.0) format('woff2'),url(../fonts/fontawesome-webfont.woff?v=4.5.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.5.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.btn-social{position:relative;padding-left:44px;text-align:left}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;text-align:left;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;line-height:34px;font-size:1.6em}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%!important}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,.2)}.btn-adn.active,.btn-adn.focus,.btn-adn:active,.btn-adn:focus,.btn-adn:hover,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,.2)}.btn-adn.active.focus,.btn-adn.active:focus,.btn-adn.active:hover,.btn-adn:active.focus,.btn-adn:active:focus,.btn-adn:active:hover,.open>.dropdown-toggle.btn-adn.focus,.open>.dropdown-toggle.btn-adn:focus,.open>.dropdown-toggle.btn-adn:hover{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,.2)}.btn-adn.disabled,.btn-adn.disabled.active,.btn-adn.disabled.focus,.btn-adn.disabled:active,.btn-adn.disabled:focus,.btn-adn.disabled:hover,.btn-adn[disabled],.btn-adn[disabled].active,.btn-adn[disabled].focus,.btn-adn[disabled]:active,.btn-adn[disabled]:focus,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn,fieldset[disabled] .btn-adn.active,fieldset[disabled] .btn-adn.focus,fieldset[disabled] .btn-adn:active,fieldset[disabled] .btn-adn:focus,fieldset[disabled] .btn-adn:hover{background-color:#d87a68;border-color:rgba(0,0,0,.2)}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,.2)}.btn-bitbucket.active,.btn-bitbucket.focus,.btn-bitbucket:active,.btn-bitbucket:focus,.btn-bitbucket:hover,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,.2)}.btn-bitbucket.active.focus,.btn-bitbucket.active:focus,.btn-bitbucket.active:hover,.btn-bitbucket:active.focus,.btn-bitbucket:active:focus,.btn-bitbucket:active:hover,.open>.dropdown-toggle.btn-bitbucket.focus,.open>.dropdown-toggle.btn-bitbucket:focus,.open>.dropdown-toggle.btn-bitbucket:hover{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,.2)}.btn-bitbucket.disabled,.btn-bitbucket.disabled.active,.btn-bitbucket.disabled.focus,.btn-bitbucket.disabled:active,.btn-bitbucket.disabled:focus,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled],.btn-bitbucket[disabled].active,.btn-bitbucket[disabled].focus,.btn-bitbucket[disabled]:active,.btn-bitbucket[disabled]:focus,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket,fieldset[disabled] .btn-bitbucket.active,fieldset[disabled] .btn-bitbucket.focus,fieldset[disabled] .btn-bitbucket:active,fieldset[disabled] .btn-bitbucket:focus,fieldset[disabled] .btn-bitbucket:hover{background-color:#205081;border-color:rgba(0,0,0,.2)}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,.2)}.btn-dropbox.active,.btn-dropbox.focus,.btn-dropbox:active,.btn-dropbox:focus,.btn-dropbox:hover,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,.2)}.btn-dropbox.active.focus,.btn-dropbox.active:focus,.btn-dropbox.active:hover,.btn-dropbox:active.focus,.btn-dropbox:active:focus,.btn-dropbox:active:hover,.open>.dropdown-toggle.btn-dropbox.focus,.open>.dropdown-toggle.btn-dropbox:focus,.open>.dropdown-toggle.btn-dropbox:hover{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,.2)}.btn-dropbox.disabled,.btn-dropbox.disabled.active,.btn-dropbox.disabled.focus,.btn-dropbox.disabled:active,.btn-dropbox.disabled:focus,.btn-dropbox.disabled:hover,.btn-dropbox[disabled],.btn-dropbox[disabled].active,.btn-dropbox[disabled].focus,.btn-dropbox[disabled]:active,.btn-dropbox[disabled]:focus,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox,fieldset[disabled] .btn-dropbox.active,fieldset[disabled] .btn-dropbox.focus,fieldset[disabled] .btn-dropbox:active,fieldset[disabled] .btn-dropbox:focus,fieldset[disabled] .btn-dropbox:hover{background-color:#1087dd;border-color:rgba(0,0,0,.2)}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,.2)}.btn-facebook.active,.btn-facebook.focus,.btn-facebook:active,.btn-facebook:focus,.btn-facebook:hover,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,.2)}.btn-facebook.active.focus,.btn-facebook.active:focus,.btn-facebook.active:hover,.btn-facebook:active.focus,.btn-facebook:active:focus,.btn-facebook:active:hover,.open>.dropdown-toggle.btn-facebook.focus,.open>.dropdown-toggle.btn-facebook:focus,.open>.dropdown-toggle.btn-facebook:hover{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,.2)}.btn-facebook.disabled,.btn-facebook.disabled.active,.btn-facebook.disabled.focus,.btn-facebook.disabled:active,.btn-facebook.disabled:focus,.btn-facebook.disabled:hover,.btn-facebook[disabled],.btn-facebook[disabled].active,.btn-facebook[disabled].focus,.btn-facebook[disabled]:active,.btn-facebook[disabled]:focus,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook,fieldset[disabled] .btn-facebook.active,fieldset[disabled] .btn-facebook.focus,fieldset[disabled] .btn-facebook:active,fieldset[disabled] .btn-facebook:focus,fieldset[disabled] .btn-facebook:hover{background-color:#3b5998;border-color:rgba(0,0,0,.2)}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,.2)}.btn-flickr.active,.btn-flickr.focus,.btn-flickr:active,.btn-flickr:focus,.btn-flickr:hover,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,.2)}.btn-flickr.active.focus,.btn-flickr.active:focus,.btn-flickr.active:hover,.btn-flickr:active.focus,.btn-flickr:active:focus,.btn-flickr:active:hover,.open>.dropdown-toggle.btn-flickr.focus,.open>.dropdown-toggle.btn-flickr:focus,.open>.dropdown-toggle.btn-flickr:hover{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,.2)}.btn-flickr.disabled,.btn-flickr.disabled.active,.btn-flickr.disabled.focus,.btn-flickr.disabled:active,.btn-flickr.disabled:focus,.btn-flickr.disabled:hover,.btn-flickr[disabled],.btn-flickr[disabled].active,.btn-flickr[disabled].focus,.btn-flickr[disabled]:active,.btn-flickr[disabled]:focus,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr,fieldset[disabled] .btn-flickr.active,fieldset[disabled] .btn-flickr.focus,fieldset[disabled] .btn-flickr:active,fieldset[disabled] .btn-flickr:focus,fieldset[disabled] .btn-flickr:hover{background-color:#ff0084;border-color:rgba(0,0,0,.2)}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,.2)}.btn-foursquare.active,.btn-foursquare.focus,.btn-foursquare:active,.btn-foursquare:focus,.btn-foursquare:hover,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,.2)}.btn-foursquare.active.focus,.btn-foursquare.active:focus,.btn-foursquare.active:hover,.btn-foursquare:active.focus,.btn-foursquare:active:focus,.btn-foursquare:active:hover,.open>.dropdown-toggle.btn-foursquare.focus,.open>.dropdown-toggle.btn-foursquare:focus,.open>.dropdown-toggle.btn-foursquare:hover{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,.2)}.btn-foursquare.disabled,.btn-foursquare.disabled.active,.btn-foursquare.disabled.focus,.btn-foursquare.disabled:active,.btn-foursquare.disabled:focus,.btn-foursquare.disabled:hover,.btn-foursquare[disabled],.btn-foursquare[disabled].active,.btn-foursquare[disabled].focus,.btn-foursquare[disabled]:active,.btn-foursquare[disabled]:focus,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare,fieldset[disabled] .btn-foursquare.active,fieldset[disabled] .btn-foursquare.focus,fieldset[disabled] .btn-foursquare:active,fieldset[disabled] .btn-foursquare:focus,fieldset[disabled] .btn-foursquare:hover{background-color:#f94877;border-color:rgba(0,0,0,.2)}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,.2)}.btn-github.active,.btn-github.focus,.btn-github:active,.btn-github:focus,.btn-github:hover,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,.2)}.btn-github.active.focus,.btn-github.active:focus,.btn-github.active:hover,.btn-github:active.focus,.btn-github:active:focus,.btn-github:active:hover,.open>.dropdown-toggle.btn-github.focus,.open>.dropdown-toggle.btn-github:focus,.open>.dropdown-toggle.btn-github:hover{color:#fff;background-color:#191919;border-color:rgba(0,0,0,.2)}.btn-github.disabled,.btn-github.disabled.active,.btn-github.disabled.focus,.btn-github.disabled:active,.btn-github.disabled:focus,.btn-github.disabled:hover,.btn-github[disabled],.btn-github[disabled].active,.btn-github[disabled].focus,.btn-github[disabled]:active,.btn-github[disabled]:focus,.btn-github[disabled]:hover,fieldset[disabled] .btn-github,fieldset[disabled] .btn-github.active,fieldset[disabled] .btn-github.focus,fieldset[disabled] .btn-github:active,fieldset[disabled] .btn-github:focus,fieldset[disabled] .btn-github:hover{background-color:#444;border-color:rgba(0,0,0,.2)}.btn-github .badge{color:#444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,.2)}.btn-google.active,.btn-google.focus,.btn-google:active,.btn-google:focus,.btn-google:hover,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,.2)}.btn-google.active.focus,.btn-google.active:focus,.btn-google.active:hover,.btn-google:active.focus,.btn-google:active:focus,.btn-google:active:hover,.open>.dropdown-toggle.btn-google.focus,.open>.dropdown-toggle.btn-google:focus,.open>.dropdown-toggle.btn-google:hover{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,.2)}.btn-google.disabled,.btn-google.disabled.active,.btn-google.disabled.focus,.btn-google.disabled:active,.btn-google.disabled:focus,.btn-google.disabled:hover,.btn-google[disabled],.btn-google[disabled].active,.btn-google[disabled].focus,.btn-google[disabled]:active,.btn-google[disabled]:focus,.btn-google[disabled]:hover,fieldset[disabled] .btn-google,fieldset[disabled] .btn-google.active,fieldset[disabled] .btn-google.focus,fieldset[disabled] .btn-google:active,fieldset[disabled] .btn-google:focus,fieldset[disabled] .btn-google:hover{background-color:#dd4b39;border-color:rgba(0,0,0,.2)}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,.2)}.btn-instagram.active,.btn-instagram.focus,.btn-instagram:active,.btn-instagram:focus,.btn-instagram:hover,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,.2)}.btn-instagram.active.focus,.btn-instagram.active:focus,.btn-instagram.active:hover,.btn-instagram:active.focus,.btn-instagram:active:focus,.btn-instagram:active:hover,.open>.dropdown-toggle.btn-instagram.focus,.open>.dropdown-toggle.btn-instagram:focus,.open>.dropdown-toggle.btn-instagram:hover{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,.2)}.btn-instagram.disabled,.btn-instagram.disabled.active,.btn-instagram.disabled.focus,.btn-instagram.disabled:active,.btn-instagram.disabled:focus,.btn-instagram.disabled:hover,.btn-instagram[disabled],.btn-instagram[disabled].active,.btn-instagram[disabled].focus,.btn-instagram[disabled]:active,.btn-instagram[disabled]:focus,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram,fieldset[disabled] .btn-instagram.active,fieldset[disabled] .btn-instagram.focus,fieldset[disabled] .btn-instagram:active,fieldset[disabled] .btn-instagram:focus,fieldset[disabled] .btn-instagram:hover{background-color:#3f729b;border-color:rgba(0,0,0,.2)}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,.2)}.btn-linkedin.active,.btn-linkedin.focus,.btn-linkedin:active,.btn-linkedin:focus,.btn-linkedin:hover,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,.2)}.btn-linkedin.active.focus,.btn-linkedin.active:focus,.btn-linkedin.active:hover,.btn-linkedin:active.focus,.btn-linkedin:active:focus,.btn-linkedin:active:hover,.open>.dropdown-toggle.btn-linkedin.focus,.open>.dropdown-toggle.btn-linkedin:focus,.open>.dropdown-toggle.btn-linkedin:hover{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,.2)}.btn-linkedin.disabled,.btn-linkedin.disabled.active,.btn-linkedin.disabled.focus,.btn-linkedin.disabled:active,.btn-linkedin.disabled:focus,.btn-linkedin.disabled:hover,.btn-linkedin[disabled],.btn-linkedin[disabled].active,.btn-linkedin[disabled].focus,.btn-linkedin[disabled]:active,.btn-linkedin[disabled]:focus,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin,fieldset[disabled] .btn-linkedin.active,fieldset[disabled] .btn-linkedin.focus,fieldset[disabled] .btn-linkedin:active,fieldset[disabled] .btn-linkedin:focus,fieldset[disabled] .btn-linkedin:hover{background-color:#007bb6;border-color:rgba(0,0,0,.2)}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,.2)}.btn-microsoft.active,.btn-microsoft.focus,.btn-microsoft:active,.btn-microsoft:focus,.btn-microsoft:hover,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,.2)}.btn-microsoft.active.focus,.btn-microsoft.active:focus,.btn-microsoft.active:hover,.btn-microsoft:active.focus,.btn-microsoft:active:focus,.btn-microsoft:active:hover,.open>.dropdown-toggle.btn-microsoft.focus,.open>.dropdown-toggle.btn-microsoft:focus,.open>.dropdown-toggle.btn-microsoft:hover{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,.2)}.btn-microsoft.active,.btn-microsoft:active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft.disabled,.btn-microsoft.disabled.active,.btn-microsoft.disabled.focus,.btn-microsoft.disabled:active,.btn-microsoft.disabled:focus,.btn-microsoft.disabled:hover,.btn-microsoft[disabled],.btn-microsoft[disabled].active,.btn-microsoft[disabled].focus,.btn-microsoft[disabled]:active,.btn-microsoft[disabled]:focus,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft,fieldset[disabled] .btn-microsoft.active,fieldset[disabled] .btn-microsoft.focus,fieldset[disabled] .btn-microsoft:active,fieldset[disabled] .btn-microsoft:focus,fieldset[disabled] .btn-microsoft:hover{background-color:#2672ec;border-color:rgba(0,0,0,.2)}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-odnoklassniki{color:#fff;background-color:#f4731c;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki.active,.btn-odnoklassniki.focus,.btn-odnoklassniki:active,.btn-odnoklassniki:focus,.btn-odnoklassniki:hover,.open>.dropdown-toggle.btn-odnoklassniki{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki.active.focus,.btn-odnoklassniki.active:focus,.btn-odnoklassniki.active:hover,.btn-odnoklassniki:active.focus,.btn-odnoklassniki:active:focus,.btn-odnoklassniki:active:hover,.open>.dropdown-toggle.btn-odnoklassniki.focus,.open>.dropdown-toggle.btn-odnoklassniki:focus,.open>.dropdown-toggle.btn-odnoklassniki:hover{color:#fff;background-color:#b14c09;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki.disabled,.btn-odnoklassniki.disabled.active,.btn-odnoklassniki.disabled.focus,.btn-odnoklassniki.disabled:active,.btn-odnoklassniki.disabled:focus,.btn-odnoklassniki.disabled:hover,.btn-odnoklassniki[disabled],.btn-odnoklassniki[disabled].active,.btn-odnoklassniki[disabled].focus,.btn-odnoklassniki[disabled]:active,.btn-odnoklassniki[disabled]:focus,.btn-odnoklassniki[disabled]:hover,fieldset[disabled] .btn-odnoklassniki,fieldset[disabled] .btn-odnoklassniki.active,fieldset[disabled] .btn-odnoklassniki.focus,fieldset[disabled] .btn-odnoklassniki:active,fieldset[disabled] .btn-odnoklassniki:focus,fieldset[disabled] .btn-odnoklassniki:hover{background-color:#f4731c;border-color:rgba(0,0,0,.2)}.btn-odnoklassniki .badge{color:#f4731c;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,.2)}.btn-openid.active,.btn-openid.focus,.btn-openid:active,.btn-openid:focus,.btn-openid:hover,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,.2)}.btn-openid.active.focus,.btn-openid.active:focus,.btn-openid.active:hover,.btn-openid:active.focus,.btn-openid:active:focus,.btn-openid:active:hover,.open>.dropdown-toggle.btn-openid.focus,.open>.dropdown-toggle.btn-openid:focus,.open>.dropdown-toggle.btn-openid:hover{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,.2)}.btn-openid.disabled,.btn-openid.disabled.active,.btn-openid.disabled.focus,.btn-openid.disabled:active,.btn-openid.disabled:focus,.btn-openid.disabled:hover,.btn-openid[disabled],.btn-openid[disabled].active,.btn-openid[disabled].focus,.btn-openid[disabled]:active,.btn-openid[disabled]:focus,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid,fieldset[disabled] .btn-openid.active,fieldset[disabled] .btn-openid.focus,fieldset[disabled] .btn-openid:active,fieldset[disabled] .btn-openid:focus,fieldset[disabled] .btn-openid:hover{background-color:#f7931e;border-color:rgba(0,0,0,.2)}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,.2)}.btn-pinterest.active,.btn-pinterest.focus,.btn-pinterest:active,.btn-pinterest:focus,.btn-pinterest:hover,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,.2)}.btn-pinterest.active.focus,.btn-pinterest.active:focus,.btn-pinterest.active:hover,.btn-pinterest:active.focus,.btn-pinterest:active:focus,.btn-pinterest:active:hover,.open>.dropdown-toggle.btn-pinterest.focus,.open>.dropdown-toggle.btn-pinterest:focus,.open>.dropdown-toggle.btn-pinterest:hover{color:#fff;background-color:#801419;border-color:rgba(0,0,0,.2)}.btn-pinterest.disabled,.btn-pinterest.disabled.active,.btn-pinterest.disabled.focus,.btn-pinterest.disabled:active,.btn-pinterest.disabled:focus,.btn-pinterest.disabled:hover,.btn-pinterest[disabled],.btn-pinterest[disabled].active,.btn-pinterest[disabled].focus,.btn-pinterest[disabled]:active,.btn-pinterest[disabled]:focus,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest,fieldset[disabled] .btn-pinterest.active,fieldset[disabled] .btn-pinterest.focus,fieldset[disabled] .btn-pinterest:active,fieldset[disabled] .btn-pinterest:focus,fieldset[disabled] .btn-pinterest:hover{background-color:#cb2027;border-color:rgba(0,0,0,.2)}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,.2)}.btn-reddit.active,.btn-reddit.focus,.btn-reddit:active,.btn-reddit:focus,.btn-reddit:hover,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,.2)}.btn-reddit.active.focus,.btn-reddit.active:focus,.btn-reddit.active:hover,.btn-reddit:active.focus,.btn-reddit:active:focus,.btn-reddit:active:hover,.open>.dropdown-toggle.btn-reddit.focus,.open>.dropdown-toggle.btn-reddit:focus,.open>.dropdown-toggle.btn-reddit:hover{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,.2)}.btn-reddit.disabled,.btn-reddit.disabled.active,.btn-reddit.disabled.focus,.btn-reddit.disabled:active,.btn-reddit.disabled:focus,.btn-reddit.disabled:hover,.btn-reddit[disabled],.btn-reddit[disabled].active,.btn-reddit[disabled].focus,.btn-reddit[disabled]:active,.btn-reddit[disabled]:focus,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit,fieldset[disabled] .btn-reddit.active,fieldset[disabled] .btn-reddit.focus,fieldset[disabled] .btn-reddit:active,fieldset[disabled] .btn-reddit:focus,fieldset[disabled] .btn-reddit:hover{background-color:#eff7ff;border-color:rgba(0,0,0,.2)}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,.2)}.btn-soundcloud.active,.btn-soundcloud.focus,.btn-soundcloud:active,.btn-soundcloud:focus,.btn-soundcloud:hover,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,.2)}.btn-soundcloud.active.focus,.btn-soundcloud.active:focus,.btn-soundcloud.active:hover,.btn-soundcloud:active.focus,.btn-soundcloud:active:focus,.btn-soundcloud:active:hover,.open>.dropdown-toggle.btn-soundcloud.focus,.open>.dropdown-toggle.btn-soundcloud:focus,.open>.dropdown-toggle.btn-soundcloud:hover{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,.2)}.btn-soundcloud.disabled,.btn-soundcloud.disabled.active,.btn-soundcloud.disabled.focus,.btn-soundcloud.disabled:active,.btn-soundcloud.disabled:focus,.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled],.btn-soundcloud[disabled].active,.btn-soundcloud[disabled].focus,.btn-soundcloud[disabled]:active,.btn-soundcloud[disabled]:focus,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud,fieldset[disabled] .btn-soundcloud.active,fieldset[disabled] .btn-soundcloud.focus,fieldset[disabled] .btn-soundcloud:active,fieldset[disabled] .btn-soundcloud:focus,fieldset[disabled] .btn-soundcloud:hover{background-color:#f50;border-color:rgba(0,0,0,.2)}.btn-soundcloud .badge{color:#f50;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,.2)}.btn-tumblr.active,.btn-tumblr.focus,.btn-tumblr:active,.btn-tumblr:focus,.btn-tumblr:hover,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,.2)}.btn-tumblr.active.focus,.btn-tumblr.active:focus,.btn-tumblr.active:hover,.btn-tumblr:active.focus,.btn-tumblr:active:focus,.btn-tumblr:active:hover,.open>.dropdown-toggle.btn-tumblr.focus,.open>.dropdown-toggle.btn-tumblr:focus,.open>.dropdown-toggle.btn-tumblr:hover{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,.2)}.btn-tumblr.disabled,.btn-tumblr.disabled.active,.btn-tumblr.disabled.focus,.btn-tumblr.disabled:active,.btn-tumblr.disabled:focus,.btn-tumblr.disabled:hover,.btn-tumblr[disabled],.btn-tumblr[disabled].active,.btn-tumblr[disabled].focus,.btn-tumblr[disabled]:active,.btn-tumblr[disabled]:focus,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr,fieldset[disabled] .btn-tumblr.active,fieldset[disabled] .btn-tumblr.focus,fieldset[disabled] .btn-tumblr:active,fieldset[disabled] .btn-tumblr:focus,fieldset[disabled] .btn-tumblr:hover{background-color:#2c4762;border-color:rgba(0,0,0,.2)}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,.2)}.btn-twitter.active,.btn-twitter.focus,.btn-twitter:active,.btn-twitter:focus,.btn-twitter:hover,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,.2)}.btn-twitter.active.focus,.btn-twitter.active:focus,.btn-twitter.active:hover,.btn-twitter:active.focus,.btn-twitter:active:focus,.btn-twitter:active:hover,.open>.dropdown-toggle.btn-twitter.focus,.open>.dropdown-toggle.btn-twitter:focus,.open>.dropdown-toggle.btn-twitter:hover{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,.2)}.btn-twitter.disabled,.btn-twitter.disabled.active,.btn-twitter.disabled.focus,.btn-twitter.disabled:active,.btn-twitter.disabled:focus,.btn-twitter.disabled:hover,.btn-twitter[disabled],.btn-twitter[disabled].active,.btn-twitter[disabled].focus,.btn-twitter[disabled]:active,.btn-twitter[disabled]:focus,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter,fieldset[disabled] .btn-twitter.active,fieldset[disabled] .btn-twitter.focus,fieldset[disabled] .btn-twitter:active,fieldset[disabled] .btn-twitter:focus,fieldset[disabled] .btn-twitter:hover{background-color:#55acee;border-color:rgba(0,0,0,.2)}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,.2)}.btn-vimeo.active,.btn-vimeo.focus,.btn-vimeo:active,.btn-vimeo:focus,.btn-vimeo:hover,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,.2)}.btn-vimeo.active.focus,.btn-vimeo.active:focus,.btn-vimeo.active:hover,.btn-vimeo:active.focus,.btn-vimeo:active:focus,.btn-vimeo:active:hover,.open>.dropdown-toggle.btn-vimeo.focus,.open>.dropdown-toggle.btn-vimeo:focus,.open>.dropdown-toggle.btn-vimeo:hover{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,.2)}.btn-vimeo.disabled,.btn-vimeo.disabled.active,.btn-vimeo.disabled.focus,.btn-vimeo.disabled:active,.btn-vimeo.disabled:focus,.btn-vimeo.disabled:hover,.btn-vimeo[disabled],.btn-vimeo[disabled].active,.btn-vimeo[disabled].focus,.btn-vimeo[disabled]:active,.btn-vimeo[disabled]:focus,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo,fieldset[disabled] .btn-vimeo.active,fieldset[disabled] .btn-vimeo.focus,fieldset[disabled] .btn-vimeo:active,fieldset[disabled] .btn-vimeo:focus,fieldset[disabled] .btn-vimeo:hover{background-color:#1ab7ea;border-color:rgba(0,0,0,.2)}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,.2)}.btn-vk.active,.btn-vk.focus,.btn-vk:active,.btn-vk:focus,.btn-vk:hover,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,.2)}.btn-vk.active.focus,.btn-vk.active:focus,.btn-vk.active:hover,.btn-vk:active.focus,.btn-vk:active:focus,.btn-vk:active:hover,.open>.dropdown-toggle.btn-vk.focus,.open>.dropdown-toggle.btn-vk:focus,.open>.dropdown-toggle.btn-vk:hover{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,.2)}.btn-vk.disabled,.btn-vk.disabled.active,.btn-vk.disabled.focus,.btn-vk.disabled:active,.btn-vk.disabled:focus,.btn-vk.disabled:hover,.btn-vk[disabled],.btn-vk[disabled].active,.btn-vk[disabled].focus,.btn-vk[disabled]:active,.btn-vk[disabled]:focus,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk,fieldset[disabled] .btn-vk.active,fieldset[disabled] .btn-vk.focus,fieldset[disabled] .btn-vk:active,fieldset[disabled] .btn-vk:focus,fieldset[disabled] .btn-vk:hover{background-color:#587ea3;border-color:rgba(0,0,0,.2)}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,.2)}.btn-yahoo.active,.btn-yahoo.focus,.btn-yahoo:active,.btn-yahoo:focus,.btn-yahoo:hover,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,.2)}.btn-yahoo.active.focus,.btn-yahoo.active:focus,.btn-yahoo.active:hover,.btn-yahoo:active.focus,.btn-yahoo:active:focus,.btn-yahoo:active:hover,.open>.dropdown-toggle.btn-yahoo.focus,.open>.dropdown-toggle.btn-yahoo:focus,.open>.dropdown-toggle.btn-yahoo:hover{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,.2)}.btn-yahoo.disabled,.btn-yahoo.disabled.active,.btn-yahoo.disabled.focus,.btn-yahoo.disabled:active,.btn-yahoo.disabled:focus,.btn-yahoo.disabled:hover,.btn-yahoo[disabled],.btn-yahoo[disabled].active,.btn-yahoo[disabled].focus,.btn-yahoo[disabled]:active,.btn-yahoo[disabled]:focus,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo,fieldset[disabled] .btn-yahoo.active,fieldset[disabled] .btn-yahoo.focus,fieldset[disabled] .btn-yahoo:active,fieldset[disabled] .btn-yahoo:focus,fieldset[disabled] .btn-yahoo:hover{background-color:#720e9e;border-color:rgba(0,0,0,.2)}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.icon-asterisk-invalid{color:red;margin:.2em;font-size:2em;font-weight:700}.z-required{margin:.2em;position:relative}input+.z-decorator>.z-required{top:.4em}select+.z-decorator>.z-required{top:.2em}.invalid{position:absolute;display:none;-moz-min-width:200px;-ms-min-width:200px;-o-min-width:200px;-webkit-min-width:200px;min-width:200px;max-width:450px;max-height:40px}input:invalid,select:invalid,textarea:invalid{border:1px solid red!important;border-left:5px solid red!important}input:invalid+.z-decorator>.invalid,select:invalid+.z-decorator>.invalid,span.z-decorator span.invalid,textarea:invalid+.z-decorator>.invalid{visibility:visible;display:inline-block;background-color:#bd362f;margin:.3em 0 0 1em;padding:4px 10px;-ms-border-radius:3px 3px 3px 3px!important;border-radius:3px!important;background-position:15px center;background-repeat:no-repeat;-webkit-box-shadow:0 0 12px #999;-ms-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;-ms-opacity:.8;opacity:.8;z-index:20}select:invalid+.z-decorator>.invalid{margin:.1em 0 0 1em}.invalid>i{margin-right:8px}.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-top-center,.toast-top-full-width{top:0;right:0;width:100%}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}} \ No newline at end of file diff --git a/ngClient/css/main.css b/ngClient/_system/css/main.css similarity index 100% rename from ngClient/css/main.css rename to ngClient/_system/css/main.css diff --git a/ngClient/images/PresentvsNew.png b/ngClient/_system/images/PresentvsNew.png similarity index 100% rename from ngClient/images/PresentvsNew.png rename to ngClient/_system/images/PresentvsNew.png diff --git a/ngClient/images/forCrowd_logo_34x34.jpg b/ngClient/_system/images/forCrowd_logo_34x34.jpg similarity index 100% rename from ngClient/images/forCrowd_logo_34x34.jpg rename to ngClient/_system/images/forCrowd_logo_34x34.jpg diff --git a/ngClient/_system/js/app/app.js b/ngClient/_system/js/app/app.js new file mode 100644 index 000000000..1b70dce1a --- /dev/null +++ b/ngClient/_system/js/app/app.js @@ -0,0 +1,7733 @@ +/*** + * App module: main + * + * Bootstrap the app. + * + ***/ +(function () { + 'use strict'; + + angular.module('main', [ + 'ngRoute', + 'ngSanitize', + 'breeze.angular', + 'angular-google-analytics', + 'angularUtils.directives.dirDisqus', + 'ui.bootstrap', + 'highcharts-ng' + ]); + + angular.module('main') + .run(['logger', mainRun]); + + function mainRun(logger) { + logger = logger.forSource('mainRun'); + } + +})(); + +/* + * Authorization interceptors for angular & OData + */ + +(function () { + 'use strict'; + + angular.module('main') + .config(['$httpProvider', authorizationConfig]); + + angular.module('main') + .run(['$window', 'logger', authorizationRun]); + + var interceptorId = 'angularInterceptor'; + angular.module('main') + .factory(interceptorId, ['$q', '$window', 'logger', angularInterceptor]); + + function authorizationConfig($httpProvider) { + $httpProvider.interceptors.push(interceptorId); + } + + function authorizationRun($window, logger) { + + // Logger + logger = logger.forSource('authorizationRun'); + + // OData interceptor + var oldClient = $window.OData.defaultHttpClient; + var newClient = { + request: function (request, success, error) { + request.headers = request.headers || {}; + var token = angular.fromJson($window.localStorage.getItem('token')); + request.headers.Authorization = token !== null ? 'Bearer ' + token.access_token : ''; + return oldClient.request(request, success, error); + } + }; + $window.OData.defaultHttpClient = newClient; + } + + // angular + function angularInterceptor($q, $window, logger) { + + // Logger + logger = logger.forSource(interceptorId); + + return { + request: function (config) { + config.headers = config.headers || {}; + var token = angular.fromJson($window.localStorage.getItem('token')); + config.headers.Authorization = token !== null ? 'Bearer ' + token.access_token : ''; + return config; + }, + response: function (response) { + if (response.status === 401) { + // handle the case where the user is not authenticated + } + return response || $q.when(response); + } + }; + } +})(); + +(function () { + 'use strict'; + + angular.module('main') + .config(['breezeProvider', breezeConfig]); + + function breezeConfig(breezeProvider) { + + breeze.config.initializeAdapterInstance('uriBuilder', 'odata'); + + // Use Web API OData to query and save + var adapter = breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true); + adapter.getRoutePrefix = getRoutePrefix_Microsoft_AspNet_WebApi_OData_5_3_x; + + // convert between server-side PascalCase and client-side camelCase + // breeze.NamingConvention.camelCase.setAsDefault(); + + function getRoutePrefix_Microsoft_AspNet_WebApi_OData_5_3_x(dataService) { + + // Copied from breeze.debug and modified for Web API OData v.5.3.1. + var parser = null; + if (typeof document === 'object') { // browser + parser = document.createElement('a'); + parser.href = dataService.serviceName; + } else { // node + parser = url.parse(dataService.serviceName); + } + + // THE CHANGE FOR 5.3.1: Add '/' prefix to pathname + var prefix = parser.pathname; + if (prefix[0] !== '/') { + prefix = '/' + prefix; + } // add leading '/' (only in IE) + if (prefix.substr(-1) !== '/') { + prefix += '/'; + } // ensure trailing '/' + + return prefix; + } + } +})(); + +(function () { + 'use strict'; + + var factoryId = 'exceptionHandlerExtension'; + angular.module('main') + .config(['$provide', extendHandler]); + + function extendHandler($provide) { + $provide.decorator('$exceptionHandler', ['$delegate', '$injector', '$window', 'serviceAppUrl', 'logger', exceptionHandlerExtension]); + } + + function exceptionHandlerExtension($delegate, $injector, $window, serviceAppUrl, logger) { + logger = logger.forSource(factoryId); + + var exceptionUrl = serviceAppUrl + '/api/Exception/Record'; + + return function (exception, cause) { + + // No need to call the base, will be logged here + // $delegate(exception, cause); + + // Show a generic error to the user + logger.logError('Something went wrong, please try again later!', null, true); + + getSourceMappedStackTrace(exception) + .then(function (sourceMappedStack) { + + // Send the exception to the server + var $location = $injector.get('$location'); + var $http = $injector.get('$http'); + + var exceptionModel = { + Message: exception.message, + Cause: cause, + Url: $location.url(), + Stack: sourceMappedStack + }; + + $http.post(exceptionUrl, exceptionModel); + + // Rethrow the exception + setTimeout(function () { + throw exception; + }); + }); + }; + + function getSourceMappedStackTrace(exception) { + var $q = $injector.get('$q'), + $http = $injector.get('$http'), + SMConsumer = $window.sourceMap.SourceMapConsumer, + cache = {}; + + if (exception.stack) { // not all browsers support stack traces + return $q.all($.map(exception.stack.split(/\n/), function (stackLine) { + var match = stackLine.match(/^(.+)(http.+):(\d+):(\d+)/); + if (match) { + var prefix = match[1], url = match[2], line = match[3], col = match[4]; + + return getMapForScript(url).then(function (map) { + + var pos = map.originalPositionFor({ + line: parseInt(line, 10), + column: parseInt(col, 10) + }); + + var mangledName = prefix.match(/\s*(at)?\s*(.*?)\s*(\(|@)/); + mangledName = (mangledName && mangledName[2]) || ''; + + return ' at ' + (pos.name ? pos.name : mangledName) + ' ' + + $window.location.origin + pos.source + ':' + pos.line + ':' + + pos.column; + }, function () { + return stackLine; + }); + } else { + return $q.when(stackLine); + } + })).then(function (lines) { + return lines.join('\n'); + }); + } else { + return $q.when(''); + } + + // Retrieve a SourceMap object for a minified script URL + function getMapForScript(url) { + if (cache[url]) { + return cache[url]; + } else { + var promise = $http.get(url).then(function (response) { + var m = response.data.match(/\/\/# sourceMappingURL=(.+\.map)/); + if (m) { + var path = url.match(/^(.+)\/[^/]+$/); + path = path && path[1]; + return $http.get(path + '/' + m[1]).then(function (response) { + return new SMConsumer(response.data); + }); + } else { + return $q.reject(); + } + }); + cache[url] = promise; + return promise; + } + } + } + } +})(); + +(function () { + 'use strict'; + + angular.module('main') + .config(['AnalyticsProvider', 'analyticsTrackingCode', 'analyticsDomainName', analyticsConfig]); + + angular.module('main').run(['Analytics', function (Analytics) { }]); + + function analyticsConfig(AnalyticsProvider, analyticsTrackingCode, analyticsDomainName) { + AnalyticsProvider.setAccount(analyticsTrackingCode) + .setDomainName(analyticsDomainName) + .ignoreFirstPageLoad(true); + } +})(); + +(function () { + 'use strict'; + + angular.module('main') + .config(['$routeProvider', '$locationProvider', routeConfig]); + + angular.module('main') + .run(['$rootScope', '$location', 'locationHistory', 'logger', routeRun]); + + function routeConfig($routeProvider, $locationProvider) { + + // Routes + $routeProvider + + /* Content */ + .when('/', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/default.aspx', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + // Different than normal content, enableDisqus: false + .when('/_system/content/404/', { title: function () { return '404'; }, templateUrl: '/_system/views/content/404.html?v=0.49.0', enableDisqus: false, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/content/:key/', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + + /* CMRP List + View + Edit pages */ + .when('/_system/resourcePool', { title: function () { return 'CMRP List'; }, templateUrl: '/_system/views/resourcePool/resourcePoolList.html?v=0.49.1', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/resourcePool/new', { title: function () { return 'New CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/resourcePool/:resourcePoolId/edit', { title: function () { return 'Edit CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/resourcePool/:resourcePoolId', { title: function () { return 'View CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolView.html?v=0.49.0', enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + + /* Account */ + .when('/_system/account/accountEdit', { title: function () { return 'Account Edit'; }, templateUrl: '/_system/views/account/accountEdit.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/addPassword', { title: function () { return 'Add Password'; }, templateUrl: '/_system/views/account/addPassword.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/changeEmail', { title: function () { return 'Change Email'; }, templateUrl: '/_system/views/account/changeEmail.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/changePassword', { title: function () { return 'Change Password'; }, templateUrl: '/_system/views/account/changePassword.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/confirmEmail', { title: function () { return 'Confirm Email'; }, templateUrl: '/_system/views/account/confirmEmail.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/login', { title: function () { return 'Login'; }, templateUrl: '/_system/views/account/login.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/register', { title: function () { return 'Register'; }, templateUrl: '/_system/views/account/register.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/resetPassword', { title: function () { return 'Reset Password'; }, templateUrl: '/_system/views/account/resetPassword.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + + /* Otherwise */ + .otherwise({ redirectTo: '/_system/content/404' }); // TODO Is it possible to return Response.StatusCode = 404; ? + + // Html5Mode is on, if supported (# will not be used) + if (window.history && window.history.pushState) { + $locationProvider.html5Mode({ enabled: true }); + } + + function getManageRouteTitle(params) { + + var entity = params.entity[0].toUpperCase() + params.entity.substring(1); + + var action = typeof params.action !== 'undefined' ? + params.action[0].toUpperCase() + params.action.substring(1) : + 'List'; + + return entity + ' ' + action; + } + + function getContentRouteTitle(params) { + + var title = typeof params.key !== 'undefined' ? + params.key[0] + params.key.substring(1) : + 'Home'; // Default view + + return title; + } + + function getContentTemplateUrl(params) { + + var key = typeof params.key !== 'undefined' ? + params.key : + 'home'; // Default view + + return '/_system/views/content/' + key + '.html?v=0.49.0'; + } + + function validateAccess(userFactory, $route, $q, locationHistory, $location, logger) { + + logger = logger.forSource('validateAccess'); + + var deferred = $q.defer(); + + locationHistory.createItem($location, $route.current) + .then(function () { + userFactory.getCurrentUser() + .then(function (currentUser) { + if ($route.current.accessType !== 'undefined') { + + // Invalid access cases + if (($route.current.accessType === 'unauthenticatedRequired' && currentUser.isAuthenticated()) || + ($route.current.accessType === 'authenticatedRequired' && !currentUser.isAuthenticated())) { + deferred.reject({ accessType: $route.current.accessType }); + } + } + + deferred.resolve(); + }) + .catch(function () { + deferred.reject(); // TODO Handle? + }); + }); + + return deferred.promise; + } + } + + function routeRun($rootScope, $location, locationHistory, logger) { + + // Logger + logger = logger.forSource('routeRun'); + + $rootScope.$on('$routeChangeSuccess', routeChangeSuccess); + $rootScope.$on('$routeChangeError', routeChangeError); + + // Navigate to correct page in 'Invalid access' cases + function routeChangeError(event, current, previous, eventObj) { + if (eventObj.accessType === 'unauthenticatedRequired') { + $location.url(locationHistory.previousItem('unauthenticatedRequired').url()); + } else if (eventObj.accessType === 'authenticatedRequired') { + $location.url('/_system/account/login?error=To be able to continue, please login first'); + } + } + + function routeChangeSuccess(event, current, previous) { + + // View title + var viewTitle = ''; + if (typeof current.title !== 'undefined') { + // TODO Is this correct? + viewTitle = current.title(current.params); + } + $rootScope.viewTitle = viewTitle; + } + } +})(); + +(function () { + 'use strict'; + + var factoryId = 'Element'; + angular.module('main') + .factory(factoryId, ['$rootScope', 'logger', elementFactory]); + + function elementFactory($rootScope, logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Server-side + Object.defineProperty(Element.prototype, 'IsMainElement', { + enumerable: true, + configurable: true, + get: function () { return this.backingFields._IsMainElement; }, + set: function (value) { + + var self = this; + + if (self.backingFields._IsMainElement !== value) { + self.backingFields._IsMainElement = value; + + // TODO When this prop set in constructor, ResourcePool is null, in such case, ignore + // However, it would be better to always have a ResourcePool? / SH - 29 Nov. '15 + if (typeof self.ResoucePool === 'undefined') { + return; + } + + // Main element check: If there is another element that its IsMainElement flag is true, make it false + if (value) { + self.ResourcePool.ElementSet.forEach(function (element) { + if (element !== self && element.IsMainElement) { + element.IsMainElement = false; + } + }); + + // Update selectedElement of resourcePool + self.ResourcePool.selectedElement(self); + } + } + } + }); + + // Return + return Element; + + function Element() { + + var self = this; + + // Server-side + self.Id = 0; + self.Name = ''; + // TODO breezejs - Cannot assign a navigation property in an entity ctor + //self.ResourcePool = null; + //self.ElementFieldSet = []; + //self.ElementItemSet = []; + //self.ParentFieldSet = []; + + // Local variables + self.backingFields = { + // Server-side + _IsMainElement: false, + + // Client-side + _parent: null, + _familyTree: null, + _elementFieldIndexSet: null, + _indexRating: null, + _directIncomeField: null, + _multiplierField: null, + _totalResourcePoolAmount: null + }; + self.isEditing = false; + + // Functions + self.directIncome = directIncome; + self.directIncomeField = directIncomeField; + self.directIncomeIncludingResourcePoolAmount = directIncomeIncludingResourcePoolAmount; + self.elementFieldIndexSet = elementFieldIndexSet; + self.familyTree = familyTree; + self.fullSize = fullSize; + self.indexRating = indexRating; + self.multiplier = multiplier; + self.multiplierField = multiplierField; + self.parent = parent; + self.resourcePoolAmount = resourcePoolAmount; + self.setDirectIncomeField = setDirectIncomeField; + self.setElementFieldIndexSet = setElementFieldIndexSet; + self.setFamilyTree = setFamilyTree; + self.setIndexRating = setIndexRating; + self.setMultiplierField = setMultiplierField; + self.setParent = setParent; + self.totalDirectIncome = totalDirectIncome; + self.totalDirectIncomeIncludingResourcePoolAmount = totalDirectIncomeIncludingResourcePoolAmount; + self.totalIncome = totalIncome; + self.totalIncomeAverage = totalIncomeAverage; + self.totalResourcePoolAmount = totalResourcePoolAmount; + + /*** Implementations ***/ + + function directIncome() { + + // TODO Check totalIncome notes + + var value = 0; + self.ElementItemSet.forEach(function (item) { + value += item.directIncome(); + }); + + return value; + } + + function directIncomeField() { + + // TODO In case of add / remove fields? + if (self.backingFields._directIncomeField === null) { + self.setDirectIncomeField(); + } + + return self.backingFields._directIncomeField; + } + + function directIncomeIncludingResourcePoolAmount() { + + // TODO Check totalIncome notes + + var value = 0; + self.ElementItemSet.forEach(function (item) { + value += item.directIncomeIncludingResourcePoolAmount(); + }); + + return value; + } + + function elementFieldIndexSet() { + if (self.backingFields._elementFieldIndexSet === null) { + self.setElementFieldIndexSet(); + } + return self.backingFields._elementFieldIndexSet; + } + + function familyTree() { + + // TODO In case of add / remove elements? + if (self.backingFields._familyTree === null) { + self.setFamilyTree(); + } + + return self.backingFields._familyTree; + } + + // UI related: Determines whether the chart & element details will use full row (col-md-4 vs col-md-12 etc.) + // TODO Obsolete for the moment! + function fullSize() { + return (self.ElementFieldSet.length > 4) || self.elementFieldIndexSet().length > 2; + } + + function getElementFieldIndexSet(element) { + + var sortedElementFieldSet = element.ElementFieldSet.sort(function (a, b) { return a.SortOrder - b.SortOrder; }); + var indexSet = []; + + // Validate + sortedElementFieldSet.forEach(function (field) { + if (field.IndexEnabled) { + indexSet.push(field); + } + + if (field.DataType === 6 && field.SelectedElement !== null) { + var childIndexSet = getElementFieldIndexSet(field.SelectedElement); + + childIndexSet.forEach(function (childIndex) { + indexSet.push(childIndex); + }); + } + }); + + return indexSet; + } + + function indexRating() { + + if (self.backingFields._indexRating === null) { + self.setIndexRating(false); + } + + return self.backingFields._indexRating; + } + + function multiplier() { + + // TODO Check totalIncome notes + + var value = 0; + self.ElementItemSet.forEach(function (item) { + value += item.multiplier(); + }); + + return value; + } + + function multiplierField() { + + // TODO In case of add / remove field? + if (self.backingFields._multiplierField !== null) { + self.setMultiplierField(); + } + + return self.backingFields._multiplierField; + } + + function parent() { + + // TODO In case of add / remove elements? + if (self.backingFields._parent === null) { + self.setParent(); + } + + return self.backingFields._parent; + } + + function resourcePoolAmount() { + + // TODO Check totalIncome notes + + var value = 0; + self.ElementItemSet.forEach(function (item) { + value += item.resourcePoolAmount(); + }); + + return value; + } + + function setDirectIncomeField() { + var result = self.ElementFieldSet.filter(function (field) { + return field.DataType === 11; + }); + + if (result.length > 0) { + self.backingFields._directIncomeField = result[0]; + } + } + + function setElementFieldIndexSet() { + self.backingFields._elementFieldIndexSet = getElementFieldIndexSet(self); + } + + function setFamilyTree() { + + self.backingFields._familyTree = []; + + var element = self; + while (element !== null) { + self.backingFields._familyTree.unshift(element); + element = element.parent(); + } + + // TODO At the moment it's only upwards, later include children? + } + + function setIndexRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var indexSet = self.elementFieldIndexSet(); + + var value = 0; + indexSet.forEach(function (index) { + value += index.indexRating(); + }); + + if (self.backingFields._indexRating !== value) { + self.backingFields._indexRating = value; + + // Update related + if (updateRelated) { + self.elementFieldIndexSet().forEach(function (index) { + index.setIndexRatingPercentage(); + }); + } + } + } + + function setMultiplierField() { + var result = self.ElementFieldSet.filter(function (field) { + return field.DataType === 12; + }); + + if (result.length > 0) { + self.backingFields._multiplierField = result[0]; + } + } + + function setParent() { + if (self.ParentFieldSet.length > 0) { + self.backingFields._parent = self.ParentFieldSet[0].Element; + } + } + + function totalDirectIncome() { + + // TODO Check totalIncome notes + + var value = 0; + self.ElementItemSet.forEach(function (item) { + value += item.totalDirectIncome(); + }); + + return value; + } + + function totalDirectIncomeIncludingResourcePoolAmount() { + + // TODO Check totalIncome notes + + var value = 0; + self.ElementItemSet.forEach(function (item) { + value += item.totalDirectIncomeIncludingResourcePoolAmount(); + }); + + return value; + } + + function totalIncome() { + + // TODO If elementItems could set their parent element's totalIncome when their totalIncome changes, it wouldn't be necessary to sum this result everytime? + + var value = 0; + self.ElementItemSet.forEach(function (item) { + value += item.totalIncome(); + }); + + return value; + } + + function totalIncomeAverage() { + + // Validate + if (self.ElementItemSet.length === 0) { + return 0; + } + + return self.totalIncome() / self.ElementItemSet.length; + } + + // TODO This is out of pattern! + function totalResourcePoolAmount() { + + // TODO Check totalIncome notes + + var value; + + if (self === self.ResourcePool.mainElement()) { + + value = self.ResourcePool.InitialValue; + + self.ElementItemSet.forEach(function (item) { + value += item.totalResourcePoolAmount(); + }); + + } else { + if (self.ResourcePool.mainElement() !== null) { + value = self.ResourcePool.mainElement().totalResourcePoolAmount(); + } + } + + //logger.log('TRPA-A ' + value.toFixed(2)); + + if (self.backingFields._totalResourcePoolAmount !== value) { + self.backingFields._totalResourcePoolAmount = value; + + //logger.log('TRPA-B ' + value.toFixed(2)); + + self.elementFieldIndexSet().forEach(function (field) { + // TODO How about this check? + // if (field.DataType === 11) { - + field.setIndexIncome(); + // } + }); + } + + return value; + } + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'ElementCell'; + angular.module('main') + .factory(factoryId, ['logger', elementCellFactory]); + + function elementCellFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Return + return ElementCell; + + function ElementCell() { + + var self = this; + + // Server-side + self.Id = 0; + self.ElementFieldId = 0; + self.ElementItemId = 0; + self.StringValue = ''; // Computed value - Used in: resourcePoolEditor.html + self.NumericValueTotal = 0; // Computed value - Used in: setOtherUsersNumericValueTotal, setCurrentUserNumericValue + self.NumericValueCount = 0; // Computed value - Used in: setOtherUsersNumericValueCount + self.SelectedElementItemId = null; + // TODO breezejs - Cannot assign a navigation property in an entity ctor + //self.ElementField = null; + //self.ElementItem = null; + //self.SelectedElementItem = null; + //self.UserElementCellSet = []; + + // Local variables + self.backingFields = { + _currentUserNumericValue: null, + _otherUsersNumericValueTotal: null, + _otherUsersNumericValueCount: null, + _numericValue: null, + _numericValueMultiplied: null, + _numericValueMultipliedPercentage: null, + _passiveRating: null, + _aggressiveRating: null, + _rating: null, + _ratingPercentage: null, + _indexIncome: null + }; + self.isEditing = false; + + // Functions + self.aggressiveRating = aggressiveRating; + self.currentUserCell = currentUserCell; + self.currentUserNumericValue = currentUserNumericValue; + self.indexIncome = indexIncome; + self.numericValue = numericValue; + self.numericValueAverage = numericValueAverage; + self.numericValueCount = numericValueCount; + self.numericValueMultiplied = numericValueMultiplied; + self.numericValueMultipliedPercentage = numericValueMultipliedPercentage; + self.numericValueTotal = numericValueTotal; + self.otherUsersNumericValueCount = otherUsersNumericValueCount; + self.otherUsersNumericValueTotal = otherUsersNumericValueTotal; + self.passiveRating = passiveRating; + self.rating = rating; + self.ratingPercentage = ratingPercentage; + self.setAggressiveRating = setAggressiveRating; + self.setCurrentUserNumericValue = setCurrentUserNumericValue; + self.setIndexIncome = setIndexIncome; + self.setNumericValue = setNumericValue; + self.setNumericValueMultiplied = setNumericValueMultiplied; + self.setNumericValueMultipliedPercentage = setNumericValueMultipliedPercentage; + self.setOtherUsersNumericValueCount = setOtherUsersNumericValueCount; + self.setOtherUsersNumericValueTotal = setOtherUsersNumericValueTotal; + self.setPassiveRating = setPassiveRating; + self.setRating = setRating; + self.setRatingPercentage = setRatingPercentage; + self.value = value; + + /*** Implementations ***/ + + function aggressiveRating() { + + if (self.backingFields._aggressiveRating === null) { + self.setAggressiveRating(false); + } + + return self.backingFields._aggressiveRating; + } + + function currentUserCell() { + return self.UserElementCellSet.length > 0 ? + self.UserElementCellSet[0] : + null; + } + + function currentUserNumericValue() { + + if (self.backingFields._currentUserNumericValue === null) { + self.setCurrentUserNumericValue(false); + } + + return self.backingFields._currentUserNumericValue; + } + + // TODO This is out of pattern! + function indexIncome() { + + //if (self.backingFields._indexIncome === null) { + self.setIndexIncome(); + //} + + return self.backingFields._indexIncome; + } + + function numericValue() { + + if (self.backingFields._numericValue === null) { + self.setNumericValue(false); + } + + return self.backingFields._numericValue; + } + + function numericValueAverage() { + + if (self.numericValueCount() === null) { + return null; + } + + return self.numericValueCount() === 0 ? + 0 : + self.numericValueTotal() / self.numericValueCount(); + } + + function numericValueCount() { + return self.ElementField.UseFixedValue ? + self.currentUserCell() !== null && self.currentUserCell().UserId === self.ElementField.Element.ResourcePool.UserId ? // If it belongs to current user + 1 : + self.otherUsersNumericValueCount() : + self.otherUsersNumericValueCount() + 1; // There is always default value, increase count by 1 + } + + function numericValueMultiplied() { + + if (self.backingFields._numericValueMultiplied === null) { + self.setNumericValueMultiplied(false); + } + + return self.backingFields._numericValueMultiplied; + } + + function numericValueMultipliedPercentage() { + if (self.backingFields._numericValueMultipliedPercentage === null) { + self.setNumericValueMultipliedPercentage(false); + } + + return self.backingFields._numericValueMultipliedPercentage; + } + + function numericValueTotal() { + return self.ElementField.UseFixedValue ? + self.currentUserCell() !== null && self.currentUserCell().UserId === self.ElementField.Element.ResourcePool.UserId ? // If it belongs to current user + self.currentUserNumericValue() : + self.otherUsersNumericValueTotal() : + self.otherUsersNumericValueTotal() + self.currentUserNumericValue(); + } + + // TODO Since this is a fixed value based on NumericValueCount & current user's rate, + // it could be calculated on server, check it later again / SH - 03 Aug. '15 + function otherUsersNumericValueCount() { + + // Set other users' value on the initial call + if (self.backingFields._otherUsersNumericValueCount === null) { + self.setOtherUsersNumericValueCount(); + } + + return self.backingFields._otherUsersNumericValueCount; + } + + // TODO Since this is a fixed value based on NumericValueTotal & current user's rate, + // it could be calculated on server, check it later again / SH - 03 Aug. '15 + function otherUsersNumericValueTotal() { + + // Set other users' value on the initial call + if (self.backingFields._otherUsersNumericValueTotal === null) { + self.setOtherUsersNumericValueTotal(); + } + + return self.backingFields._otherUsersNumericValueTotal; + } + + function passiveRating() { + if (self.backingFields._passiveRating === null) { + self.setPassiveRating(false); + } + + return self.backingFields._passiveRating; + } + + function rating() { + + if (self.backingFields._rating === null) { + self.setRating(false); + } + + return self.backingFields._rating; + } + + function ratingPercentage() { + + if (self.backingFields._ratingPercentage === null) { + self.setRatingPercentage(false); + } + + return self.backingFields._ratingPercentage; + } + + // TODO Currently updateRelated is always 'false'? + function setAggressiveRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; // Default value? + + if (self.ElementField.IndexEnabled && self.ElementField.referenceRatingMultiplied() > 0) { + switch (self.ElementField.IndexSortType) { + case 1: { // HighestToLowest (High rating is better) + value = (1 - self.numericValueMultipliedPercentage()) / self.ElementField.referenceRatingMultiplied(); + break; + } + case 2: { // LowestToHighest (Low rating is better) + value = self.numericValueMultiplied() / self.ElementField.referenceRatingMultiplied(); + break; + } + } + + if (!self.ElementField.referenceRatingAllEqualFlag()) { + value = 1 - value; + } + } + + if (self.backingFields._aggressiveRating !== value) { + self.backingFields._aggressiveRating = value; + + // Update related values + if (updateRelated) { + // TODO ? + } + } + } + + function setCurrentUserNumericValue(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value; + var userCell = self.currentUserCell(); + + switch (self.ElementField.DataType) { + case 2: { value = userCell !== null ? userCell.BooleanValue : 0; break; } + case 3: { value = userCell !== null ? userCell.IntegerValue : 0; break; } + case 4: { value = userCell !== null ? userCell.DecimalValue : 50; /* Default value? */ break; } + // TODO 5 (DateTime?) + case 11: { + // DirectIncome: No need to try user's cell, always return all users', which will be CMRP owner's value + value = self.NumericValueTotal !== null ? self.NumericValueTotal : 0; + break; + } + case 12: { value = userCell !== null ? userCell.DecimalValue : 0; /* Default value? */ break; } + // default: { throw 'currentUserNumericValue() - Not supported element field type: ' + self.ElementField.DataType; } + } + + if (self.backingFields._currentUserNumericValue !== value) { + self.backingFields._currentUserNumericValue = value; + + // Update related + if (updateRelated) { + self.setNumericValue(); + } + } + } + + function setIndexIncome(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; // Default value? + + if (self.ElementField.DataType === 6 && self.SelectedElementItem !== null) { + // item's index income / how many times this item has been selected (used) by higher items + // TODO Check whether ParentCellSet gets updated when selecting / deselecting an item + value = self.SelectedElementItem.totalResourcePoolIncome() / self.SelectedElementItem.ParentCellSet.length; + } else { + if (self.ElementField.IndexEnabled) { + value = self.ElementField.indexIncome() * self.ratingPercentage(); + } + } + + if (self.backingFields._indexIncome !== value) { + self.backingFields._indexIncome = value; + + // TODO Update related? + // item.totalResourcePoolIncome + } + } + + function setNumericValue(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value; + + if (typeof self.ElementField !== 'undefined') { + switch (self.ElementField.Element.ResourcePool.RatingMode) { + case 1: { value = self.currentUserNumericValue(); break; } // Current user's + case 2: { value = self.numericValueAverage(); break; } // All + } + + } + + // If it's different... + if (self.backingFields._numericValue !== value) { + self.backingFields._numericValue = value; + + // Update related + if (updateRelated) { + + if (self.ElementField.DataType === 11) { + self.ElementItem.setDirectIncome(); + } + + self.setNumericValueMultiplied(); + } + } + } + + function setNumericValueMultiplied(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value; + + // if (typeof self.ElementField === 'undefined' || !self.ElementField.IndexEnabled) { + if (typeof self.ElementField === 'undefined') { + value = 0; // ? + } else { + value = self.numericValue() * self.ElementItem.multiplier(); + //logger.log(self.ElementField.Name[0] + '-' + self.ElementItem.Name[0] + ' NVMA ' + self.numericValue()); + //logger.log(self.ElementField.Name[0] + '-' + self.ElementItem.Name[0] + ' NVMB ' + self.ElementItem.multiplier()); + } + + if (self.backingFields._numericValueMultiplied !== value) { + self.backingFields._numericValueMultiplied = value; + + // Update related + if (updateRelated) { + self.ElementField.setNumericValueMultiplied(); + } + + // IMPORTANT REMARK: If the field is using IndexSortType 1, + // then it would be better to directly call field.setReferenceRatingMultiplied() method. + // It would be quicker to calculate. + // However, since field.setNumericValueMultiplied() will make 'numericValueMultipliedPercentage' calculations + // which meanwhile will call referenceRatingMultiplied() method anyway. So it becomes redundant. + // This code block could possibly be improved with a IndexSortType switch case, + // but it seems it would be bit overkill. + // Still something to think about it later? / SH - 22 Oct. '15 + //self.ElementField.setReferenceRatingMultiplied(); + } + } + + function setNumericValueMultipliedPercentage(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; + + if (self.ElementField.IndexEnabled && self.ElementField.numericValueMultiplied() > 0) { + value = self.numericValueMultiplied() / self.ElementField.numericValueMultiplied(); + } + + if (self.backingFields._numericValueMultipliedPercentage !== value) { + self.backingFields._numericValueMultipliedPercentage = value; + + // Update related + if (updateRelated) { + // TODO ? + } + } + } + + function setOtherUsersNumericValueCount() { + self.backingFields._otherUsersNumericValueCount = self.NumericValueCount; + + // Exclude current user's + if (self.UserElementCellSet.length > 0) { + self.backingFields._otherUsersNumericValueCount--; + } + } + + function setOtherUsersNumericValueTotal() { + + self.backingFields._otherUsersNumericValueTotal = self.NumericValueTotal !== null ? + self.NumericValueTotal : + 0; + + // Exclude current user's + if (self.UserElementCellSet.length > 0) { + + var userValue = 0; + switch (self.ElementField.DataType) { + // TODO Check bool to decimal conversion? + case 2: { userValue = self.UserElementCellSet[0].BooleanValue; break; } + case 3: { userValue = self.UserElementCellSet[0].IntegerValue; break; } + case 4: { userValue = self.UserElementCellSet[0].DecimalValue; break; } + // TODO 5 - DateTime? + case 11: { userValue = self.UserElementCellSet[0].DecimalValue; break; } + // TODO 12 - Multiplier? + //default: { + // throw 'setOtherUsersNumericValueTotal - Not supported element field type: ' + self.ElementField.DataType; + //} + } + + self.backingFields._otherUsersNumericValueTotal -= userValue; + } + } + + function setPassiveRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; + + if (self.ElementField.IndexEnabled) { + + switch (self.ElementField.IndexSortType) { + case 1: { // HightestToLowest (High rating is better) + value = self.numericValueMultipliedPercentage(); + break; + } + case 2: { // LowestToHighest (Low rating is better) + if (self.ElementField.passiveRating() > 0) { + value = (1 - self.numericValueMultipliedPercentage()) / self.ElementField.passiveRating(); + } + break; + } + } + } + + if (self.backingFields._passiveRating !== value) { + self.backingFields._passiveRating = value; + + // Update related + if (updateRelated) { + // TODO ? + } + } + } + + function setRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; + + // If there is only one item, then always %100 + if (self.ElementField.ElementCellSet.length === 1) { + value = 1; + } else { + switch (self.ElementField.IndexCalculationType) { + case 1: // Aggressive rating + { + value = self.aggressiveRating(); + break; + } + case 2: // Passive rating + { + value = self.passiveRating(); + break; + } + } + } + + if (self.backingFields._rating !== value) { + self.backingFields._rating = value; + + // Update related + if (updateRelated) { + // TODO ? + } + } + } + + function setRatingPercentage(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; + + if (self.ElementField.IndexEnabled && self.ElementField.rating() > 0) { + value = self.rating() / self.ElementField.rating(); + } + + if (self.backingFields._ratingPercentage !== value) { + self.backingFields._ratingPercentage = value; + + // Update related + if (updateRelated) { + // TODO ? + } + } + } + + function value() { + + var value = null; + //var currentUserCell = self.UserElementCellSet.length > 0 + // ? self.UserElementCellSet[0] + // : null; + + switch (self.ElementField.DataType) { + case 1: { + if (self.UserElementCellSet.length > 0) { + value = self.UserElementCellSet[0].StringValue; + } + break; + } + case 2: { + if (self.UserElementCellSet.length > 0) { + value = self.UserElementCellSet[0].BooleanValue ? 'True' : 'False'; + } + break; + } + case 3: { + if (self.UserElementCellSet.length > 0) { + value = self.UserElementCellSet[0].IntegerValue; + } + break; + } + // TODO 5 (DateTime?) + case 4: + case 11: + case 12: { + if (self.UserElementCellSet.length > 0) { + value = self.UserElementCellSet[0].DecimalValue; + } + break; + } + case 6: { + if (self.SelectedElementItem !== null) { + value = self.SelectedElementItem.Name; + } + } + } + + return value; + } + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'ElementField'; + angular.module('main') + .factory(factoryId, ['$rootScope', 'logger', elementFieldFactory]); + + function elementFieldFactory($rootScope, logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Server-side + Object.defineProperty(ElementField.prototype, 'DataType', { + enumerable: true, + configurable: true, + get: function () { return this.backingFields._dataType; }, + set: function (value) { + + var self = this; + if (self.backingFields._dataType !== value) { + + // Related element cells: Clear old values and set default values if necessary + self.ElementCellSet.forEach(function (elementCell) { + + elementCell.SelectedElementItemId = null; + + // Remove related user cell + // TODO Similar to resourcePoolFactory.js - function removeElementCell(elementCell) + var userElementCellSet = elementCell.UserElementCellSet.slice(); + userElementCellSet.forEach(function (userElementCell) { + // TODO Should this also be done through broadcast & on dataContext.js? / SH - 14 Dec. '15 + userElementCell.entityAspect.setDetached(); + }); + + // Add user element cell, if the new type is not 'Element' + if (value !== 6) { + + var userElementCell = elementCell.currentUserCell(); + + var isNew = userElementCell === null; + + if (isNew) { + // TODO Similar to resourcePoolFactory.js - function createElementCell(elementCell) + userElementCell = { + User: self.Element.ResourcePool.User, + ElementCell: elementCell + }; + } + + switch (value) { + case 1: { userElementCell.StringValue = ''; break; } + case 2: { userElementCell.BooleanValue = false; break; } + case 3: { userElementCell.IntegerValue = 0; break; } + case 4: { userElementCell.DecimalValue = 50; break; } + // TODO 5 (DateTime?) + case 11: { userElementCell.DecimalValue = 100; break; } + case 12: { userElementCell.DecimalValue = 0; break; } + } + + if (isNew) { + $rootScope.$broadcast('ElementField_createUserElementCell', userElementCell); + } + } + }); + + // Finally, set it + self.backingFields._dataType = value; + } + } + }); + + Object.defineProperty(ElementField.prototype, 'IndexEnabled', { + enumerable: true, + configurable: true, + get: function () { return this.backingFields._indexEnabled; }, + set: function (value) { + + if (this.backingFields._indexEnabled !== value) { + this.backingFields._indexEnabled = value; + + this.IndexCalculationType = value ? 1 : 0; + this.IndexSortType = value ? 1 : 0; + + // TODO Complete this block! + + //// Update related + //// a. Element + //this.Element.setElementFieldIndexSet(); + + //// b. Item(s) + //this.ElementCellSet.forEach(function(cell) { + // var item = cell.ElementItem; + // item.setElementCellIndexSet(); + //}); + + //// c. Cells + //this.ElementCellSet.forEach(function(cell) { + // cell.setNumericValueMultipliedPercentage(false); + //}); + //this.setReferenceRatingMultiplied(); + + /* IndexEnabled related functions */ + //cell.setAggressiveRating(); + //cell.setratingPercentage(); + //cell.setIndexIncome(); + } + } + }); + + // Return + return ElementField; + + function ElementField() { + + var self = this; + + // Server-side + self.Id = 0; + self.ElementId = 0; + self.Name = ''; + //self.DataType = 1; + self.SelectedElementId = null; + self.UseFixedValue = null; + self.IndexCalculationType = 0; + self.IndexSortType = 0; + self.SortOrder = 0; + self.IndexRatingTotal = 0; // Computed value - Used in: setOtherUsersIndexRatingTotal + self.IndexRatingCount = 0; // Computed value - Used in: setOtherUsersIndexRatingCount + // TODO breezejs - Cannot assign a navigation property in an entity ctor + //self.Element = null; + //self.SelectedElement = null; + //self.ElementCellSet = []; + //self.UserElementFieldSet = []; + + // Local variables + self.backingFields = { + _dataType: 1, + _indexEnabled: false, + _currentUserIndexRating: null, + _otherUsersIndexRatingTotal: null, + _otherUsersIndexRatingCount: null, + _indexRating: null, + _indexRatingPercentage: null, + _numericValueMultiplied: null, + _passiveRating: null, + _referenceRatingMultiplied: null, + // Aggressive rating formula prevents the organizations with the worst rating to get any income. + // However, in case all ratings are equal, then no one can get any income from the pool. + // This flag is used to determine this special case and let all organizations get a same share from the pool. + // See the usage in aggressiveRating() in elementCell.js + // TODO Usage of this field is correct? + _referenceRatingAllEqualFlag: true, + _aggressiveRating: null, + _rating: null, + _indexIncome: null + }; + self.isEditing = false; + + // Functions + self.currentUserElementField = currentUserElementField; + self.currentUserIndexRating = currentUserIndexRating; + self.indexIncome = indexIncome; + self.indexRating = indexRating; + self.indexRatingAverage = indexRatingAverage; + self.indexRatingCount = indexRatingCount; + self.indexRatingPercentage = indexRatingPercentage; + self.indexRatingTotal = indexRatingTotal; + self.numericValueMultiplied = numericValueMultiplied; + self.otherUsersIndexRatingCount = otherUsersIndexRatingCount; + self.otherUsersIndexRatingTotal = otherUsersIndexRatingTotal; + self.passiveRating = passiveRating; + self.rating = rating; + self.referenceRatingAllEqualFlag = referenceRatingAllEqualFlag; + self.referenceRatingMultiplied = referenceRatingMultiplied; + self.setCurrentUserIndexRating = setCurrentUserIndexRating; + self.setIndexIncome = setIndexIncome; + self.setIndexRating = setIndexRating; + self.setIndexRatingPercentage = setIndexRatingPercentage; + self.setNumericValueMultiplied = setNumericValueMultiplied; + self.setOtherUsersIndexRatingCount = setOtherUsersIndexRatingCount; + self.setOtherUsersIndexRatingTotal = setOtherUsersIndexRatingTotal; + self.setPassiveRating = setPassiveRating; + self.setRating = setRating; + self.setReferenceRatingAllEqualFlag = setReferenceRatingAllEqualFlag; + self.setReferenceRatingMultiplied = setReferenceRatingMultiplied; + + /*** Implementations ***/ + + function currentUserElementField() { + return self.UserElementFieldSet.length > 0 ? + self.UserElementFieldSet[0] : + null; + } + + function currentUserIndexRating() { + + if (self.backingFields._currentUserIndexRating === null) { + self.setCurrentUserIndexRating(false); + } + + return self.backingFields._currentUserIndexRating; + } + + function indexIncome() { + + if (self.backingFields._indexIncome === null) { + self.setIndexIncome(false); + } + + return self.backingFields._indexIncome; + } + + function indexRating() { + + if (self.backingFields._indexRating === null) { + self.setIndexRating(false); + } + + return self.backingFields._indexRating; + } + + function indexRatingAverage() { + + if (self.indexRatingCount() === null) { + return null; + } + + return self.indexRatingCount() === 0 ? + 0 : + self.indexRatingTotal() / self.indexRatingCount(); + } + + function indexRatingCount() { + return self.otherUsersIndexRatingCount() + 1; + } + + function indexRatingPercentage() { + + if (self.backingFields._indexRatingPercentage === null) { + self.setIndexRatingPercentage(false); + } + + return self.backingFields._indexRatingPercentage; + } + + function indexRatingTotal() { + return self.otherUsersIndexRatingTotal() + self.currentUserIndexRating(); + } + + function numericValueMultiplied() { + + if (self.backingFields._numericValueMultiplied === null) { + self.setNumericValueMultiplied(false); + } + + return self.backingFields._numericValueMultiplied; + } + + // TODO Since this is a fixed value based on IndexRatingCount & current user's rate, + // it could be calculated on server, check it later again / SH - 03 Aug. '15 + function otherUsersIndexRatingCount() { + + // Set other users' value on the initial call + if (self.backingFields._otherUsersIndexRatingCount === null) { + self.setOtherUsersIndexRatingCount(); + } + + return self.backingFields._otherUsersIndexRatingCount; + } + + // TODO Since this is a fixed value based on IndexRatingTotal & current user's rate, + // it could be calculated on server, check it later again / SH - 03 Aug. '15 + function otherUsersIndexRatingTotal() { + + // Set other users' value on the initial call + if (self.backingFields._otherUsersIndexRatingTotal === null) { + self.setOtherUsersIndexRatingTotal(); + } + + return self.backingFields._otherUsersIndexRatingTotal; + } + + // Helper function for Index Rating Type 1 case (low rating is better) + function passiveRating() { + if (self.backingFields._passiveRating === null) { + self.setPassiveRating(false); + } + + return self.backingFields._passiveRating; + } + + function rating() { + + if (self.backingFields._rating === null) { + self.setRating(false); + } + + return self.backingFields._rating; + } + + function referenceRatingAllEqualFlag(value) { + return self.backingFields._referenceRatingAllEqualFlag; + } + + function referenceRatingMultiplied() { + + if (self.backingFields._referenceRatingMultiplied === null) { + self.setReferenceRatingMultiplied(false); + } + + return self.backingFields._referenceRatingMultiplied; + } + + function setCurrentUserIndexRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = self.currentUserElementField() !== null ? + self.currentUserElementField().Rating : + 50; // If there is no rating, this is the default value? + + if (self.backingFields._currentUserIndexRating !== value) { + self.backingFields._currentUserIndexRating = value; + + // Update related + if (updateRelated) { + self.setIndexRating(); + } + } + } + + function setIndexIncome(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = self.Element.totalResourcePoolAmount() * self.indexRatingPercentage(); + + //if (self.IndexEnabled) { + //logger.log(self.Name[0] + ' II ' + value.toFixed(2)); + //} + + if (self.backingFields._indexIncome !== value) { + self.backingFields._indexIncome = value; + + // Update related + if (updateRelated) { + self.ElementCellSet.forEach(function (cell) { + cell.setIndexIncome(); + }); + } + } + } + + function setIndexRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; // Default value? + + switch (self.Element.ResourcePool.RatingMode) { + case 1: { value = self.currentUserIndexRating(); break; } // Current user's + case 2: { value = self.indexRatingAverage(); break; } // All + } + + //logger.log(self.Name[0] + ' IR ' + value.toFixed(2)); + + if (self.backingFields._indexRating !== value) { + self.backingFields._indexRating = value; + + // TODO Update related + if (updateRelated) { + self.Element.ResourcePool.mainElement().setIndexRating(); + } + } + } + + function setIndexRatingPercentage(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; // Default value? + + var elementIndexRating = self.Element.ResourcePool.mainElement().indexRating(); + + if (elementIndexRating === 0) { + value = 0; + } else { + value = self.indexRating() / elementIndexRating; + } + + //logger.log(self.Name[0] + ' IRP ' + value.toFixed(2)); + + if (self.backingFields._indexRatingPercentage !== value) { + self.backingFields._indexRatingPercentage = value; + + // Update related + if (updateRelated) { + self.setIndexIncome(); + } + } + } + + function setNumericValueMultiplied(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; // Default value? + + // Validate + if (self.ElementCellSet.length === 0) { + value = 0; // ? + } else { + self.ElementCellSet.forEach(function (cell) { + value += cell.numericValueMultiplied(); + //logger.log(self.Name[0] + '-' + cell.ElementItem.Name[0] + ' NVMA ' + cell.numericValueMultiplied()); + }); + } + + if (self.backingFields._numericValueMultiplied !== value) { + self.backingFields._numericValueMultiplied = value; + + //logger.log(self.Name[0] + ' NVMB ' + value.toFixed(2)); + + // Update related? + if (updateRelated && self.IndexEnabled) { + + self.ElementCellSet.forEach(function (cell) { + cell.setNumericValueMultipliedPercentage(false); + }); + + self.setPassiveRating(false); + + self.ElementCellSet.forEach(function (cell) { + cell.setPassiveRating(false); + }); + + self.setReferenceRatingMultiplied(false); + + self.ElementCellSet.forEach(function (cell) { + cell.setAggressiveRating(false); + }); + + self.ElementCellSet.forEach(function (cell) { + cell.setRating(false); + }); + + self.setRating(false); + + self.ElementCellSet.forEach(function (cell) { + cell.setRatingPercentage(false); + }); + + //self.setIndexIncome(false); + + self.ElementCellSet.forEach(function (cell) { + cell.setIndexIncome(false); + }); + } + } + } + + function setOtherUsersIndexRatingCount() { + self.backingFields._otherUsersIndexRatingCount = self.IndexRatingCount; + + // Exclude current user's + if (self.currentUserElementField() !== null) { + self.backingFields._otherUsersIndexRatingCount--; + } + } + + function setOtherUsersIndexRatingTotal() { + self.backingFields._otherUsersIndexRatingTotal = self.IndexRatingTotal !== null ? + self.IndexRatingTotal : + 0; + + // Exclude current user's + if (self.currentUserElementField() !== null) { + self.backingFields._otherUsersIndexRatingTotal -= self.currentUserElementField().Rating; + } + } + + function setPassiveRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; + + self.ElementCellSet.forEach(function (cell) { + value += 1 - cell.numericValueMultipliedPercentage(); + }); + + if (self.backingFields._passiveRating !== value) { + self.backingFields._passiveRating = value; + + if (updateRelated) { + // TODO ? + } + } + } + + function setRating(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = 0; // Default value? + + // Validate + self.ElementCellSet.forEach(function (cell) { + value += cell.rating(); + }); + + //logger.log(self.Name[0] + ' AR ' + value.toFixed(2)); + + if (self.backingFields._rating !== value) { + self.backingFields._rating = value; + + //logger.log(self.Name[0] + ' AR OK'); + + if (updateRelated) { + + // Update related + self.ElementCellSet.forEach(function (cell) { + cell.setRatingPercentage(false); + }); + + self.setIndexIncome(); + } + } + } + + function setReferenceRatingAllEqualFlag(value) { + + if (self.backingFields._referenceRatingAllEqualFlag !== value) { + self.backingFields._referenceRatingAllEqualFlag = value; + return true; + } + return false; + } + + // TODO Currently updateRelated is always 'false'? + function setReferenceRatingMultiplied(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = null; + var allEqualFlag = true; + + // Validate + if (self.ElementCellSet.length === 0) { + value = 0; // ? + } else { + + self.ElementCellSet.forEach(function (cell) { + + if (value === null) { + + switch (self.IndexSortType) { + case 1: { // HighestToLowest (High number is better) + value = (1 - cell.numericValueMultipliedPercentage()); + break; + } + case 2: { // LowestToHighest (Low number is better) + value = cell.numericValueMultiplied(); + break; + } + } + + } else { + + switch (self.IndexSortType) { + case 1: { // HighestToLowest (High number is better) + + if (1 - cell.numericValueMultipliedPercentage() !== value) { + allEqualFlag = false; + } + + if (1 - cell.numericValueMultipliedPercentage() > value) { + value = 1 - cell.numericValueMultipliedPercentage(); + } + break; + } + case 2: { // LowestToHighest (Low number is better) + + if (cell.numericValueMultiplied() !== value) { + allEqualFlag = false; + } + + if (cell.numericValueMultiplied() > value) { + value = cell.numericValueMultiplied(); + } + + break; + } + } + } + }); + } + + //logger.log(self.Name[0] + '-' + cell.ElementItem.Name[0] + ' RRMA ' + value.toFixed(2)); + + // Set all equal flag + var flagUpdated = self.setReferenceRatingAllEqualFlag(allEqualFlag); + var ratingUpdated = false; + + // Only if it's different.. + if (self.backingFields._referenceRatingMultiplied !== value) { + self.backingFields._referenceRatingMultiplied = value; + + ratingUpdated = true; + + //logger.log(self.Name[0] + ' RRMB ' + value.toFixed(2)); + } + + // Update related + if ((flagUpdated || ratingUpdated) && updateRelated) { + + // TODO ?! + + self.ElementCellSet.forEach(function (cell) { + cell.setAggressiveRating(false); + }); + + // self.setAggressiveRating(); + } + } + + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'ElementItem'; + angular.module('main') + .factory(factoryId, ['logger', elementItemFactory]); + + function elementItemFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Return + return ElementItem; + + function ElementItem() { + + var self = this; + + // Server-side + self.Id = 0; + self.ElementId = 0; + self.Name = ''; + // TODO breezejs - Cannot assign a navigation property in an entity ctor + //self.Element = null; + //self.ElementCellSet = []; + //self.ParentCellSet = []; + + // Local variables + self.backingFields = { + _elementCellIndexSet: null, + _directIncome: null, + _multiplier: null, + _totalDirectIncome: null, + _resourcePoolAmount: null, + _totalResourcePoolAmount: null, + _totalResourcePoolIncome: null + }; + self.isEditing = false; + + // Functions + self.directIncome = directIncome; + self.directIncomeIncludingResourcePoolAmount = directIncomeIncludingResourcePoolAmount; + self.elementCellIndexSet = elementCellIndexSet; + self.incomeStatus = incomeStatus; + self.multiplier = multiplier; + self.resourcePoolAmount = resourcePoolAmount; + self.setDirectIncome = setDirectIncome; + self.setElementCellIndexSet = setElementCellIndexSet; + self.setMultiplier = setMultiplier; + self.setResourcePoolAmount = setResourcePoolAmount; + self.setTotalDirectIncome = setTotalDirectIncome; + self.setTotalResourcePoolAmount = setTotalResourcePoolAmount; + self.totalDirectIncome = totalDirectIncome; + self.totalDirectIncomeIncludingResourcePoolAmount = totalDirectIncomeIncludingResourcePoolAmount; + self.totalIncome = totalIncome; + self.totalResourcePoolAmount = totalResourcePoolAmount; + self.totalResourcePoolIncome = totalResourcePoolIncome; + + /*** Implementations ***/ + + function directIncome() { + + if (self.backingFields._directIncome === null) { + self.setDirectIncome(false); + } + + return self.backingFields._directIncome; + } + + function directIncomeIncludingResourcePoolAmount() { // A.k.a Sales Price incl. VAT + return self.directIncome() + self.resourcePoolAmount(); + } + + function elementCellIndexSet() { + + if (self.backingFields._elementCellIndexSet === null) { + self.setElementCellIndexSet(); + } + + return self.backingFields._elementCellIndexSet; + } + + function getElementCellIndexSet(elementItem) { + + var indexSet = []; + var sortedElementCellSet = elementItem.ElementCellSet.sort(function (a, b) { + return a.ElementField.SortOrder - b.ElementField.SortOrder; + }); + + sortedElementCellSet.forEach(function (cell) { + + if (cell.ElementField.IndexEnabled) { + indexSet.push(cell); + } + + if (cell.ElementField.DataType === 6 && cell.SelectedElementItem !== null) { + var childIndexSet = getElementCellIndexSet(cell.SelectedElementItem); + + if (childIndexSet.length > 0) { + indexSet.push(cell); + } + } + }); + + return indexSet; + } + + function incomeStatus() { + + var totalIncome = self.totalIncome(); + // TODO Make rounding better, instead of toFixed + number + var averageIncome = Number(self.Element.totalIncomeAverage().toFixed(2)); + + if (totalIncome === averageIncome) { + return 'average'; + } else if (totalIncome < averageIncome) { + return 'low'; + } else if (totalIncome > averageIncome) { + return 'high'; + } + } + + function multiplier() { + + if (self.backingFields._multiplier === null) { + self.setMultiplier(false); + } + + return self.backingFields._multiplier; + } + + function resourcePoolAmount() { + + if (self.backingFields._resourcePoolAmount === null) { + self.setResourcePoolAmount(false); + } + + return self.backingFields._resourcePoolAmount; + } + + function setDirectIncome(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + // First, find direct income cell + var directIncomeCell = null; + + var result = self.ElementCellSet.filter(function (elementCell) { + return elementCell.ElementField.DataType === 11; + }); + + if (result.length > 0) { + directIncomeCell = result[0]; + } + + var value; + if (directIncomeCell === null) { + value = 0; + } else { + value = directIncomeCell.numericValue(); + } + + if (self.backingFields._directIncome !== value) { + self.backingFields._directIncome = value; + + // Update related + if (updateRelated) { + self.setTotalDirectIncome(); + self.setResourcePoolAmount(); + } + } + } + + function setElementCellIndexSet() { + self.backingFields._elementCellIndexSet = getElementCellIndexSet(self); + } + + function setMultiplier(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + // First, find the multiplier cell + var multiplierCell = null; + + var result = self.ElementCellSet.filter(function(elementCell) { + return elementCell.ElementField.DataType === 12; + }); + + if (result.length > 0) { + multiplierCell = result[0]; + } + + var value = 0; + + // If there is no multiplier field defined on this element, return 1, so it can return calculate the income correctly + // TODO Cover 'add new multiplier field' case as well! + if (multiplierCell === null) { + value = 1; + } else { + + // If there is a multiplier field on the element but user is not set any value, return 0 as the default value + if (multiplierCell.currentUserCell() === null || + multiplierCell.currentUserCell().DecimalValue === null) { + value = 0; + } else { // Else, user's + value = multiplierCell.currentUserCell().DecimalValue; + } + } + + if (self.backingFields._multiplier !== value) { + self.backingFields._multiplier = value; + + // Update related + self.setTotalDirectIncome(); + self.setTotalResourcePoolAmount(); + } + } + + function setResourcePoolAmount(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = self.directIncome() * self.Element.ResourcePool.resourcePoolRatePercentage(); + + if (self.backingFields._resourcePoolAmount !== value) { + self.backingFields._resourcePoolAmount = value; + + // TODO Update related + if (updateRelated) { + self.setTotalResourcePoolAmount(); + } + } + } + + function setTotalDirectIncome(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = self.directIncome() * self.multiplier(); + + if (self.backingFields._totalDirectIncome !== value) { + self.backingFields._totalDirectIncome = value; + + // TODO Update related + if (updateRelated) { + + } + } + } + + function setTotalResourcePoolAmount(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = self.resourcePoolAmount() * self.multiplier(); + + if (self.backingFields._totalResourcePoolAmount !== value) { + self.backingFields._totalResourcePoolAmount = value; + + // TODO Update related + if (updateRelated) { + + } + } + } + + function totalDirectIncome() { + + if (self.backingFields._totalDirectIncome === null) { + self.setTotalDirectIncome(false); + } + + return self.backingFields._totalDirectIncome; + } + + function totalDirectIncomeIncludingResourcePoolAmount() { // A.k.a Total Sales Price incl. VAT + return self.directIncomeIncludingResourcePoolAmount() * self.multiplier(); + } + + function totalIncome() { + var totalIncome = self.totalDirectIncome() + self.totalResourcePoolIncome(); + // TODO Make rounding better, instead of toFixed + number + return Number(totalIncome.toFixed(2)); + } + + function totalResourcePoolAmount() { + + if (self.backingFields._totalResourcePoolAmount === null) { + self.setTotalResourcePoolAmount(false); + } + + return self.backingFields._totalResourcePoolAmount; + } + + // TODO This is out of pattern! + function totalResourcePoolIncome() { + + var value = 0; + + self.ElementCellSet.forEach(function (cell) { + value += cell.indexIncome(); + }); + + if (self.backingFields._totalResourcePoolIncome !== value) { + self.backingFields._totalResourcePoolIncome = value; + + // Update related + // TODO Is this correct? It looks like it didn't affect anything? + self.ParentCellSet.forEach(function (parentCell) { + parentCell.setIndexIncome(); + }); + } + + return value; + } + + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'Enums'; + angular.module('main') + .factory(factoryId, ['logger', enumsFactory]); + + function enumsFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + var self = {}; + + self.ElementFieldDataType = { + + // A field that holds string value. + // Use StringValue property to set its value on ElementItem level. + 'String': 1, + + // A field that holds boolean value. + // Use BooleanValue property to set its value on ElementItem level. + 'Boolean': 2, + + // A field that holds integer value. + // Use IntegerValue property to set its value on ElementItem level. + 'Integer': 3, + + // A field that holds decimal value. + // Use DecimalValue property to set its value on ElementItem level. + 'Decimal': 4, + + //// A field that holds DateTime value. + //// Use DateTimeValue property to set its value on ElementItem level. + //'DateTime': 5, + + // A field that holds another defined Element object within the resource pool. + // Use SelectedElementItem property to set its value on ElementItem level. + 'Element': 6, + + // The field that presents each item's main income (e.g. Sales Price). + // Also resource pool amount will be calculated based on this field. + // Defined once per Element (at the moment, can be changed to per Resource Pool). + // Use DecimalValue property to set its value on ElementItem level. + 'DirectIncome': 11, + + // The multiplier of the resource pool (e.g. Number of sales, number of users). + // Defined once per Element (at the moment, can be changed to per Resource Pool). + // Use DecimalValue property to set its value on ElementItem level. + 'Multiplier': 12 + }; + + self.ElementFieldIndexCalculationType = { + // Default type. + // Uses the lowest score as the base (reference) rating in the group, then calculates the difference from that base. + // Base rating (lowest) gets 0 from the pool and other items get an amount based on their difference. + // Aims to maximize the benefit of the pool. + 'Aggressive': 1, + + // Sums all ratings and calculates the percentages. + // All items get an amount, including the lowest scored item. + // Good for cases that only use 'Resource Pool - Initial Amount' feature. + 'Passive': 2 + }; + + self.ElementFieldIndexSortType = { + + // Default type. + // High rating is better. + 'Highest': 1, + + // Low rating is better. + 'Lowest': 2 + }; + + self.getEnumKey = function (enumTableKey, value) { + for (var tableKey in self) { + + // Ignore these tables + if (enumTableKey === '$get' || enumTableKey === 'getEnumKey') { + return; + } + + // Search through enum tables & their values + if (tableKey === enumTableKey) { + for (var valueKey in self[tableKey]) { + if (self[tableKey][valueKey] === value) { + return valueKey; + } + } + } + } + }; + + return self; + } +})(); + +(function () { + 'use strict'; + + var factoryId = 'ResourcePool'; + angular.module('main') + .factory(factoryId, ['logger', resourcePoolFactory]); + + function resourcePoolFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Server-side properties + Object.defineProperty(ResourcePool.prototype, 'UseFixedResourcePoolRate', { + enumerable: true, + configurable: true, + get: function () { return this.backingFields._useFixedResourcePoolRate; }, + set: function (value) { + + if (this.backingFields._useFixedResourcePoolRate !== value) { + this.backingFields._useFixedResourcePoolRate = value; + + this.setResourcePoolRate(); + } + } + }); + + // Client-side properties + Object.defineProperty(ResourcePool.prototype, 'RatingMode', { + enumerable: true, + configurable: true, + get: function () { return this.backingFields._ratingMode; }, + set: function (value) { + if (this.backingFields._ratingMode !== value) { + this.backingFields._ratingMode = value; + + this.setResourcePoolRate(); + + this.ElementSet.forEach(function (element) { + + element.ElementFieldSet.forEach(function (field) { + + // Field calculations + if (field.IndexEnabled) { + field.setIndexRating(); + } + + if (!field.UseFixedValue) { + field.ElementCellSet.forEach(function (cell) { + + // Cell calculations + switch (field.DataType) { + case 2: + case 3: + case 4: + // TODO 5 (DateTime?) + case 11: + case 12: { + cell.setNumericValue(); + break; + } + } + }); + } + }); + }); + } + } + }); + + // Return + return ResourcePool; + + function ResourcePool() { + + var self = this; + + // Server-side + self.Id = 0; + self.UserId = 0; + self.Name = ''; + self.InitialValue = 0; + self.ResourcePoolRateTotal = 0; // Computed value - Used in: setOtherUsersResourcePoolRateTotal + self.ResourcePoolRateCount = 0; // Computed value - Used in: setOtherUsersResourcePoolRateCount + self.RatingCount = 0; // Computed value - Used in: resourcePoolEditor.html + // TODO breezejs - Cannot assign a navigation property in an entity ctor + //self.User = null; + //self.ElementSet = []; + //self.UserResourcePoolSet = []; + + // Local variables + self.backingFields = { + _currentUserResourcePoolRate: null, + _isAdded: false, + _otherUsersResourcePoolRateTotal: null, + _otherUsersResourcePoolRateCount: null, + _ratingMode: 1, // Only my ratings vs. All users' ratings + _resourcePoolRate: null, + _resourcePoolRatePercentage: null, + _selectedElement: null, + _useFixedResourcePoolRate: false + }; + self.isEditing = false; // Determines whether the object is being edited or not + self.isTemp = false; // Determines whether object was created for demo purposes or not + // TODO Move this to field.js? + self.displayMultiplierFunctions = true; // In some cases, it's not necessary for the user to change multiplier + + // Functions + self._init = _init; + self.currentUserResourcePool = currentUserResourcePool; + self.currentUserResourcePoolRate = currentUserResourcePoolRate; + self.displayResourcePoolDetails = displayResourcePoolDetails; + self.displayRatingMode = displayRatingMode; + self.getEntities = getEntities; + // Determines whether entityState is actually isAdded. + // Anonymous users can also add/edit resource pool. + // However, when an anonymous user adds a new resource pool, it actually doesn't save to database and entityState stays as isAdded(). + // Then, when the user clicks on 'Cancel CMRP', rejectChanges() will be called, which removes the resource pool. + // To prevent this issue, when anon user calls saveChanges, this flag will be used (isAdded will become true) and acceptChanges will be called (still not saving to actual database). + // Now, calling rejectChanges will return the entities to their previous state without any problem. + // And if the anon user will register or login, this flag will be checked in dataContext.js and all the related entities will be converted back to isAdded() state. + // SH - 30 Nov. '15 + self.isAdded = isAdded; + self.mainElement = mainElement; + self.name = name; + self.otherUsersResourcePoolRateCount = otherUsersResourcePoolRateCount; + self.otherUsersResourcePoolRateTotal = otherUsersResourcePoolRateTotal; + self.resourcePoolRate = resourcePoolRate; + self.resourcePoolRateAverage = resourcePoolRateAverage; + self.resourcePoolRateCount = resourcePoolRateCount; + self.resourcePoolRatePercentage = resourcePoolRatePercentage; + self.resourcePoolRateTotal = resourcePoolRateTotal; + self.selectedElement = selectedElement; + self.setCurrentUserResourcePoolRate = setCurrentUserResourcePoolRate; + self.setOtherUsersResourcePoolRateCount = setOtherUsersResourcePoolRateCount; + self.setOtherUsersResourcePoolRateTotal = setOtherUsersResourcePoolRateTotal; + self.setResourcePoolRate = setResourcePoolRate; + self.setResourcePoolRatePercentage = setResourcePoolRatePercentage; + self.toggleRatingMode = toggleRatingMode; + self.updateAnonymousEntities = updateAnonymousEntities; + self.updateCache = updateCache; + + /*** Implementations ***/ + + // Should be called after createEntity or retrieving it from server + function _init(setComputedFields) { + setComputedFields = typeof setComputedFields !== 'undefined' ? setComputedFields : false; + + // Set initial values of computed fields + if (setComputedFields) { + + var userRatings = []; + + // ResourcePool + self.UserResourcePoolSet.forEach(function (userResourcePool) { + self.ResourcePoolRateTotal += userResourcePool.ResourcePoolRate; + self.ResourcePoolRateCount += 1; + + if (userRatings.indexOf(userResourcePool.UserId) === -1) { + userRatings.push(userResourcePool.UserId); + } + }); + + // Fields + self.ElementSet.forEach(function (element) { + element.ElementFieldSet.forEach(function (elementField) { + elementField.UserElementFieldSet.forEach(function (userElementField) { + elementField.IndexRatingTotal += userElementField.IndexRating; + elementField.IndexRatingCount += 1; + + if (userRatings.indexOf(userElementField.UserId) === -1) { + userRatings.push(userElementField.UserId); + } + }); + + // Cells + elementField.ElementCellSet.forEach(function (elementCell) { + elementCell.UserElementCellSet.forEach(function (userElementCell) { + elementCell.StringValue = ''; // TODO ? + elementCell.NumericValueTotal += userElementCell.DecimalValue; // TODO Correct approach? + elementCell.NumericValueCount += 1; + + if (elementField.IndexEnabled) { + if (userRatings.indexOf(userElementCell.UserId) === -1) { + userRatings.push(userElementCell.UserId); + } + } + }); + }); + }); + }); + + // Rating count + self.RatingCount = userRatings.length; + } + + // Set otherUsers' data + self.setOtherUsersResourcePoolRateTotal(); + self.setOtherUsersResourcePoolRateCount(); + + // Elements + if (typeof self.ElementSet !== 'undefined') { + self.ElementSet.forEach(function (element) { + + // Fields + if (typeof element.ElementFieldSet !== 'undefined') { + element.ElementFieldSet.forEach(function (field) { + + field.setOtherUsersIndexRatingTotal(); + field.setOtherUsersIndexRatingCount(); + + // Cells + if (typeof field.ElementCellSet !== 'undefined') { + field.ElementCellSet.forEach(function (cell) { + + cell.setOtherUsersNumericValueTotal(); + cell.setOtherUsersNumericValueCount(); + }); + } + }); + } + }); + } + + updateCache(); + } + + function currentUserResourcePool() { + return self.UserResourcePoolSet.length > 0 ? + self.UserResourcePoolSet[0] : + null; + } + + function currentUserResourcePoolRate() { + + if (self.backingFields._currentUserResourcePoolRate === null) { + self.setCurrentUserResourcePoolRate(false); + } + + return self.backingFields._currentUserResourcePoolRate; + } + + function displayResourcePoolDetails() { + return self.selectedElement().directIncomeField() !== null && + self.selectedElement().elementFieldIndexSet().length > 0; + } + + // Checks whether resource pool has any item that can be rateable + // Obsolete: Replaced with RatingCount > 0 / coni2k - 21 Feb. '16 + function displayRatingMode() { + + // Check resource pool level first + if (!self.UseFixedResourcePoolRate) { + return true; + } + + // Field index level + for (var elementIndex = 0; elementIndex < self.ElementSet.length; elementIndex++) { + var element = self.ElementSet[elementIndex]; + + // If there are multiple indexes, then the users can set index rating + if (element.elementFieldIndexSet().length > 1) { + return true; + } + + // If there is an index without a fixed value + if (element.elementFieldIndexSet().length > 0 && !element.elementFieldIndexSet()[0].UseFixedValue) { + return true; + } + } + + return false; + } + + function getEntities() { + + var entities = []; + + // No need to continue + if (self.isTemp) { + return entities; + } + + // Resource pool + entities.push(self); + + // User resource pools + self.UserResourcePoolSet.forEach(function (userResourcePool) { + entities.push(userResourcePool); + }); + + // Elements + self.ElementSet.forEach(function (element) { + entities.push(element); + + // Fields + element.ElementFieldSet.forEach(function (elementField) { + entities.push(elementField); + + // User element fields + elementField.UserElementFieldSet.forEach(function (userElementField) { + entities.push(userElementField); + }); + }); + + // Items + element.ElementItemSet.forEach(function (elementItem) { + entities.push(elementItem); + + // Cells + elementItem.ElementCellSet.forEach(function (elementCell) { + entities.push(elementCell); + + // User cells + elementCell.UserElementCellSet.forEach(function (userElementCell) { + entities.push(userElementCell); + }); + }); + }); + }); + + return entities; + } + + function isAdded(value) { + if (typeof value !== 'undefined') { + self.backingFields._isAdded = value; + } + return self.backingFields._isAdded; + } + + function mainElement() { + var result = self.ElementSet.filter(function (element) { + return element.IsMainElement; + }); + + return result.length > 0 ? result[0] : null; + } + + function name() { + var name = self.Name; + name += self.isEditing ? ' - Editing' : ''; + return name; + } + + // TODO Since this is a fixed value based on ResourcePoolRateCount & current user's rate, + // it could be calculated on server, check it later again / SH - 03 Aug. '15 + function otherUsersResourcePoolRateCount() { + + // Set other users' value on the initial call + if (self.backingFields._otherUsersResourcePoolRateCount === null) { + self.setOtherUsersResourcePoolRateCount(); + } + + return self.backingFields._otherUsersResourcePoolRateCount; + } + + // TODO Since this is a fixed value based on ResourcePoolRateTotal & current user's rate, + // it could be calculated on server, check it later again / SH - 03 Aug. '15 + function otherUsersResourcePoolRateTotal() { + + // Set other users' value on the initial call + if (self.backingFields._otherUsersResourcePoolRateTotal === null) { + self.setOtherUsersResourcePoolRateTotal(); + } + + return self.backingFields._otherUsersResourcePoolRateTotal; + } + + function resourcePoolRate() { + + if (self.backingFields._resourcePoolRate === null) { + self.setResourcePoolRate(false); + } + + return self.backingFields._resourcePoolRate; + } + + function resourcePoolRateAverage() { + + if (self.resourcePoolRateCount() === null) { + return null; + } + + return self.resourcePoolRateCount() === 0 ? + 0 : + self.resourcePoolRateTotal() / self.resourcePoolRateCount(); + } + + function resourcePoolRateCount() { + return self.UseFixedResourcePoolRate ? + self.currentUserResourcePool() !== null && self.currentUserResourcePool().UserId === self.UserId ? // If it belongs to current user + 1 : + self.otherUsersResourcePoolRateCount() : + self.otherUsersResourcePoolRateCount() + 1; // There is always default value, increase count by 1 + } + + function resourcePoolRatePercentage() { + + if (self.backingFields._resourcePoolRatePercentage === null) { + self.setResourcePoolRatePercentage(false); + } + + return self.backingFields._resourcePoolRatePercentage; + } + + function resourcePoolRateTotal() { + return self.UseFixedResourcePoolRate ? + self.currentUserResourcePool() !== null && self.currentUserResourcePool().UserId === self.UserId ? // If it belongs to current user + self.currentUserResourcePoolRate() : + self.otherUsersResourcePoolRateTotal() : + self.otherUsersResourcePoolRateTotal() + self.currentUserResourcePoolRate(); + } + + function selectedElement(value) { + + // Set new value + if (typeof value !== 'undefined' && self.backingFields._selectedElement !== value) { + self.backingFields._selectedElement = value; + } + + // If there is no existing value (initial state), use mainElement() as the selected + if (self.backingFields._selectedElement === null && self.mainElement()) { + self.backingFields._selectedElement = self.mainElement(); + } + + return self.backingFields._selectedElement; + } + + function setCurrentUserResourcePoolRate(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = self.currentUserResourcePool() !== null ? + self.currentUserResourcePool().ResourcePoolRate : + 10; // Default value? + + if (self.backingFields._currentUserResourcePoolRate !== value) { + self.backingFields._currentUserResourcePoolRate = value; + + // Update related + if (updateRelated) { + self.setResourcePoolRate(); + } + } + } + + function setOtherUsersResourcePoolRateCount() { + + self.backingFields._otherUsersResourcePoolRateCount = self.ResourcePoolRateCount; + + // Exclude current user's + if (self.currentUserResourcePool() !== null) { + self.backingFields._otherUsersResourcePoolRateCount--; + } + } + + function setOtherUsersResourcePoolRateTotal() { + self.backingFields._otherUsersResourcePoolRateTotal = self.ResourcePoolRateTotal !== null ? + self.ResourcePoolRateTotal : + 0; + + // Exclude current user's + if (self.currentUserResourcePool() !== null) { + self.backingFields._otherUsersResourcePoolRateTotal -= self.currentUserResourcePool().ResourcePoolRate; + } + } + + function setResourcePoolRate(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value; + + if (self.UseFixedResourcePoolRate) { + value = self.resourcePoolRateAverage(); + } else { + switch (self.RatingMode) { + case 1: { value = self.currentUserResourcePoolRate(); break; } // Current user's + case 2: { value = self.resourcePoolRateAverage(); break; } // All + } + } + + if (self.backingFields._resourcePoolRate !== value) { + self.backingFields._resourcePoolRate = value; + + // Update related + if (updateRelated) { + self.setResourcePoolRatePercentage(); + } + } + } + + function setResourcePoolRatePercentage(updateRelated) { + updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated; + + var value = self.resourcePoolRate() === 0 ? + 0 : + self.resourcePoolRate() / 100; + + if (self.backingFields._resourcePoolRatePercentage !== value) { + self.backingFields._resourcePoolRatePercentage = value; + + // Update related + if (updateRelated) { + self.ElementSet.forEach(function (element) { + + element.ElementItemSet.forEach(function (item) { + item.setResourcePoolAmount(); + }); + }); + } + } + } + + function toggleRatingMode() { + self.RatingMode = self.RatingMode === 1 ? 2 : 1; + } + + // TOOD Should be obsolete if we could start using "auto save anonymous user" + function updateAnonymousEntities() { + + if (!self.isAdded()) { + return; + } + + // Turn the flag off + self.isAdded(false); + + // Resource pool itself + self.entityAspect.setAdded(); + + // User resource pools + self.UserResourcePoolSet.forEach(function (userResourcePool) { + userResourcePool.entityAspect.setAdded(); + }); + + // Elements + self.ElementSet.forEach(function (element) { + element.entityAspect.setAdded(); + + // Fields + element.ElementFieldSet.forEach(function (elementField) { + elementField.entityAspect.setAdded(); + + // User element fields + elementField.UserElementFieldSet.forEach(function (userElementField) { + userElementField.entityAspect.setAdded(); + }); + }); + + // Items + element.ElementItemSet.forEach(function (elementItem) { + elementItem.entityAspect.setAdded(); + + // Cells + elementItem.ElementCellSet.forEach(function (elementCell) { + elementCell.entityAspect.setAdded(); + + // User cells + elementCell.UserElementCellSet.forEach(function (userElementCell) { + userElementCell.entityAspect.setAdded(); + }); + }); + }); + }); + } + + // TODO Most of these functions are related with userService.js - updateX functions + // Try to merge these two - Actually try to handle these actions within the related entity / SH - 27 Nov. '15 + function updateCache() { + + var isUnchanged = false; + + self.setCurrentUserResourcePoolRate(); + + // Elements + if (typeof self.ElementSet !== 'undefined') { + self.ElementSet.forEach(function (element) { + + // TODO Review this later / SH - 24 Nov. '15 + element.setElementFieldIndexSet(); + + // Fields + if (typeof element.ElementFieldSet !== 'undefined') { + element.ElementFieldSet.forEach(function (field) { + + if (field.IndexEnabled) { + // TODO Actually index rating can't be set through resourcePoolEdit page and no need to update this cache + // But still keep it as a reminder? / SH - 29 Nov. '15 + field.setCurrentUserIndexRating(); + } + + // Cells + if (typeof field.ElementCellSet !== 'undefined') { + field.ElementCellSet.forEach(function (cell) { + + switch (cell.ElementField.DataType) { + case 1: { + // TODO Again what a mess! + // StringValue is a computed value, it should normally come from the server + // But in case resource pool was just created, then it should be directly set like this. + // Otherwise, it doesn't show its value on editor. + // And on top of it, since it changes, breeze thinks that 'cell' is modified and tries to send it server + // which results an error. So that's why modified check & acceptChanges parts were added. + // SH - 01 Dec. '15 + if (cell.UserElementCellSet.length > 0) { + isUnchanged = cell.entityAspect.entityState.isUnchanged(); + cell.StringValue = cell.UserElementCellSet[0].StringValue; + if (isUnchanged) { cell.entityAspect.acceptChanges(); } + } + break; + } + case 2: + case 3: + case 4: + // TODO DateTime? + { + cell.setCurrentUserNumericValue(); + break; + } + case 11: + { + // TODO DirectIncome is always calculated from NumericValueTotal + // Which is actually not correct but till that its fixed, update it like this / SH - 29 Nov. '15 + // Also check 'What a mess' of StringValue + if (cell.UserElementCellSet.length > 0) { + isUnchanged = cell.entityAspect.entityState.isUnchanged(); + cell.NumericValueTotal = cell.UserElementCellSet[0].DecimalValue; + if (isUnchanged) { cell.entityAspect.acceptChanges(); } + } + + cell.setCurrentUserNumericValue(); + break; + } + case 12: + { + cell.ElementItem.setMultiplier(); + + if (cell.ElementField.IndexEnabled) { + cell.setNumericValueMultiplied(); + } + + break; + } + } + }); + } + }); + } + }); + } + } + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'User'; + angular.module('main') + .factory(factoryId, ['logger', userFactory]); + + function userFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Return + return User; + + function User() { + + var self = this; + + // Server-side + self.Id = 0; + self.Email = ''; + self.EmailConfirmed = false; + self.UserName = ''; + self.FirstName = ''; + self.MiddleName = ''; + self.LastName = ''; + self.PhoneNumber = ''; + self.PhoneNumberConfirmed = false; + self.TwoFactorEnabled = false; + self.AccessFailedCount = 0; + self.LockoutEnabled = false; + self.LockoutEndDateUtc = null; + self.Notes = ''; + self.CreatedOn = new Date(); + self.ModifiedOn = new Date(); + self.DeletedOn = null; + // TODO breezejs - Cannot assign a navigation property in an entity ctor + //self.Claims = null; + //self.Logins = []; + //self.Roles = []; + + // Client-side + self.isEditing = false; + + // Functions + self.getEntities = getEntities; + self.hasPassword = hasPassword; + self.isAuthenticated = isAuthenticated; + + /*** Implementations ***/ + + function getEntities() { + + var entities = []; + + entities.push(self); + + self.ResourcePoolSet.forEach(function (resourcePool) { + var resourcePoolEntities = resourcePool.getEntities(); // TODO Probably there is an easier way to do this? + resourcePoolEntities.forEach(function (entity) { + entities.push(entity); + }); + }); + + // TODO Other user related entities? + + return entities; + } + + function hasPassword() { + if (typeof self.Claims === 'undefined') { + throw new Error('Invalid operation: Claims is undefined'); + } + + for (var i = 0; i < self.Claims.length; i++) { + var claim = self.Claims[i]; + if (claim.ClaimType === 'HasNoPassword') { + return false; + } + } + + return true; + } + + function isAuthenticated() { + return self.Id > 0; + } + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'UserElementCell'; + angular.module('main') + .factory(factoryId, ['logger', userElementCellFactory]); + + function userElementCellFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Properties + Object.defineProperty(UserElementCell.prototype, 'DecimalValue', { + enumerable: true, + configurable: true, + get: function () { return this.backingFields._DecimalValue; }, + set: function (value) { + if (this.backingFields._DecimalValue !== value) { + this.backingFields._DecimalValue = value; + } + } + }); + + // Return + return UserElementCell; + + function UserElementCell() { + + var self = this; + + // Server-side + self.UserId = 0; + self.ElementCellId = 0; + self.StringValue = null; + self.BooleanValue = null; + self.IntegerValue = null; + // + self.DateTimeValue = null; + + // Local variables + self.backingFields = { + _DecimalValue: null + }; + self.isEditing = false; + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'UserElementField'; + angular.module('main') + .factory(factoryId, ['logger', userElementFieldFactory]); + + function userElementFieldFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Return + return UserElementField; + + function UserElementField() { + + var self = this; + + // Server-side + self.UserId = 0; + self.ElementFieldId = 0; + self.Rating = 0; + + // Local variables + self.isEditing = false; + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'UserResourcePool'; + angular.module('main') + .factory(factoryId, ['logger', userResourcePoolFactory]); + + function userResourcePoolFactory(logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Return + return UserResourcePool; + + function UserResourcePool() { + + var self = this; + + // Server-side + self.UserId = 0; + self.ResourcePoolId = 0; + self.ResourcePoolRate = 0; + + // Local variables + self.isEditing = false; + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'applicationFactory'; + angular.module('main') + .factory(factoryId, ['$http', '$q', 'serviceAppUrl', 'logger', applicationFactory]); + + function applicationFactory($http, $q, serviceAppUrl, logger) { + logger = logger.forSource(factoryId); + + var applicationInfoUrl = serviceAppUrl + '/api/Application/ApplicationInfo'; + var applicationInfo = null; + + // Factory methods + var factory = { + getApplicationInfo: getApplicationInfo + }; + + return factory; + + /*** Implementations ***/ + + function getApplicationInfo() { + + var deferred = $q.defer(); + + if (applicationInfo !== null) { + deferred.resolve(applicationInfo); + } + else { + $http.get(applicationInfoUrl) + .success(function (data) { + applicationInfo = data; + deferred.resolve(applicationInfo); + }) + .error(function (data, status, headers, config) { + // TODO Check this approach? - Just return 'Something went wrong'? + deferred.reject({ data: data, status: status, headers: headers, config: config }); + }); + } + + return deferred.promise; + } + } +})(); + +/*** + * Service: dataContext + * + * Handles all persistence and creation/deletion of app entities + * using BreezeJS. + * + ***/ +(function () { + 'use strict'; + + var factoryId = 'dataContext'; + angular.module('main') + .factory(factoryId, ['entityManagerFactory', '$q', '$rootScope', '$timeout', 'logger', dataContext]); + + function dataContext(entityManagerFactory, $q, $rootScope, $timeout, logger) { + + // Logger + logger = logger.forSource(factoryId); + + // Manager + var currentUser = { isAuthenticated: function () { return false; } }; + var manager = null; + var metadataReadyPromise = null; + var saveTimer = null; + + // Factory methods + var factory = { + clear: clear, + createEntity: createEntity, + executeQuery: executeQuery, + fetchEntityByKey: fetchEntityByKey, + getChanges: getChanges, + getChangesCount: getChangesCount, + getEntities: getEntities, + hasChanges: hasChanges, + metadataReady: metadataReady, + rejectChanges: rejectChanges, + saveChanges: saveChanges, + saveChangesAlt: saveChangesAlt, + updateAnonymousChanges: updateAnonymousChanges + }; + + // Event handlers + $rootScope.$on('ElementField_createUserElementCell', createUserElementCell); + $rootScope.$on('userFactory_currentUserChanged', currentUserChanged); + + _init(); + + return factory; + + /*** Implementations ***/ + + function _init() { + manager = entityManagerFactory.newManager(); + } + + function clear() { + manager.clear(); + } + + function createEntity(entityType, initialValues) { + + // All entities will be created in isEditing state by default + if (typeof initialValues.isEditing === 'undefined') { + initialValues.isEditing = true; + } + + return manager.createEntity(entityType, initialValues); + } + + function createUserElementCell(event, userElementCell) { + return createEntity('UserElementCell', userElementCell); + } + + function currentUserChanged(event, newUser) { + currentUser = newUser; + } + + function executeQuery(query) { + return manager.executeQuery(query); + } + + function fetchEntityByKey(typeName, keyValues, checkLocalCacheFirst) { + return manager.fetchEntityByKey(typeName, keyValues, checkLocalCacheFirst); + } + + function getChanges(entityTypeName, entityState) { + entityTypeName = typeof entityTypeName !== 'undefined' ? entityTypeName : null; + entityState = typeof entityState !== 'undefined' ? entityState : null; + + var all = manager.getChanges(); + var changes = []; + + // Filters + all.forEach(function (change) { + if (!change.isEditing && + (entityTypeName === null || change.entityType.shortName === entityTypeName) && + (entityState === null || change.entityAspect.entityState === entityState)) { + changes.push(change); + } + }); + + return changes; + // return manager.getChanges(); + } + + function getChangesCount() { + return getChanges().length; + // return manager.getChanges().length; + } + + function getEntities(entityTypes, entityStates) { + return manager.getEntities(entityTypes, entityStates); + } + + function hasChanges() { + return manager.hasChanges(); + } + + function metadataReady() { + + if (metadataReadyPromise === null) { + + var deferred = $q.defer(); + + metadataReadyPromise = deferred.promise; + + if (manager.metadataStore.isEmpty()) { + manager.fetchMetadata() + .then(function () { + deferred.resolve(); + }, + function (error) { + deferred.reject(error); + }); + } else { + deferred.resolve(); + } + } + + return metadataReadyPromise; + } + + function rejectChanges() { + manager.rejectChanges(); + } + + function saveChanges(delay) { + delay = typeof delay !== 'undefined' ? delay : 0; + + // Anonymous user check + if (!currentUser.isAuthenticated()) { + $rootScope.$broadcast('anonymousUserInteracted'); + return $q.reject({}); + } + + // Cancel existing timers (delay the save) + if (saveTimer !== null) { + $timeout.cancel(saveTimer); + } + + // Save immediately or wait based on delay + if (delay === 0) { + return saveChangesInternal(); + } else { + saveTimer = $timeout(function () { + saveChangesInternal(); + }, delay); + return saveTimer; + } + + // TODO Is it necessary to cancel the timer at the end of the service, like this ? + + //// When the DOM element is removed from the page, + //// AngularJS will trigger the $destroy event on + //// the scope. This gives us a chance to cancel any + //// pending timer that we may have. + //$scope.$on("$destroy", function (event) { + // $timeout.cancel(increaseMultiplierTimeoutInitial); + // $timeout.cancel(increaseMultiplierTimeoutRecursive); + //}); + } + + function saveChangesInternal() { + + var count = getChangesCount(); + var promise = null; + var saveBatches = prepareSaveBatches(); + saveBatches.forEach(function (batch) { + + // ignore empty batches (except 'null' which means "save everything else") + if (batch === null || batch.length > 0) { + + // Broadcast, so UI can block + $rootScope.$broadcast('saveChangesStart'); + + promise = promise ? + promise.then(function () { return manager.saveChanges(batch); }) : + manager.saveChanges(batch); + } + }); + + // There is nothing to save? + if (promise === null) { + promise = $q.resolve(null); + } + + return promise.then(success).catch(failed).finally(completed); + + function success(result) { + logger.logSuccess('Saved ' + count + ' change(s)'); + return result; + } + + function failed(error) { + if (typeof error.status !== 'undefined' && error.status === '409') { + logger.logError('Save failed!
The record you attempted to edit was modified by another user after you got the original value. The edit operation was canceled.', error, true); + } else if (typeof error.entityErrors !== 'undefined') { + + var errorMessage = 'Save failed!
'; + + for (var key in error.entityErrors) { + var entityError = error.entityErrors[key]; + errorMessage += entityError.errorMessage + '
'; + } + + logger.logError(errorMessage, null, true); + + } else { + logger.logError('Save failed!', error, true); + } + + return $q.reject(error); // pass error along to next handler + } + + function completed() { + + // Broadcast, so UI can unblock + $rootScope.$broadcast('saveChangesCompleted'); + } + + function prepareSaveBatches() { + + var batches = []; + + // RowVersion fix + // TODO How about Deleted state? + var modifiedEntities = getChanges(null, breeze.EntityState.Modified); + modifiedEntities.forEach(function (entity) { + var rowVersion = entity.RowVersion; + entity.RowVersion = ''; + entity.RowVersion = rowVersion; + }); + batches.push(modifiedEntities); + + /* Aaargh! + * Web API OData doesn't calculate the proper save order + * which means, if we aren't careful on the client, + * we could save a new TodoItem before we saved its parent new TodoList + * or delete the parent TodoList before saving its deleted child TodoItems. + * OData says it is up to the client to save entities in the order + * required by referential constraints of the database. + * While we could save each time you make a change, that sucks. + * So we'll divvy up the pending changes into 4 batches + * 1. Deleted Todos + * 2. Deleted TodoLists + * 3. Added TodoLists + * 4. Every other change + */ + + batches.push(getChanges('UserElementCell', breeze.EntityState.Deleted)); + batches.push(getChanges('ElementCell', breeze.EntityState.Deleted)); + batches.push(getChanges('ElementItem', breeze.EntityState.Deleted)); + batches.push(getChanges('UserElementField', breeze.EntityState.Deleted)); + batches.push(getChanges('ElementField', breeze.EntityState.Deleted)); + batches.push(getChanges('Element', breeze.EntityState.Deleted)); + batches.push(getChanges('UserResourcePool', breeze.EntityState.Deleted)); + batches.push(getChanges('ResourcePool', breeze.EntityState.Deleted)); + + batches.push(getChanges('ResourcePool', breeze.EntityState.Added)); + batches.push(getChanges('UserResourcePool', breeze.EntityState.Added)); + batches.push(getChanges('Element', breeze.EntityState.Added)); + batches.push(getChanges('ElementField', breeze.EntityState.Added)); + batches.push(getChanges('UserElementField', breeze.EntityState.Added)); + batches.push(getChanges('ElementItem', breeze.EntityState.Added)); + batches.push(getChanges('ElementCell', breeze.EntityState.Added)); + batches.push(getChanges('UserElementCell', breeze.EntityState.Added)); + + // batches.push(null); // empty = save all remaining pending changes + + return batches; + /* + * No we can't flatten into one request because Web API OData reorders + * arbitrarily, causing the database failure we're trying to avoid. + */ + } + } + + function saveChangesAlt(entities, delay) { + delay = typeof delay !== 'undefined' ? delay : 0; + + // Anonymous user check + if (!currentUser.isAuthenticated()) { + $rootScope.$broadcast('anonymousUserInteracted'); + return $q.reject({}); + } + + // Cancel existing timers (delay the save) + if (saveTimer !== null) { + $timeout.cancel(saveTimer); + } + + // Save immediately or wait based on delay + if (delay === 0) { + return saveChangesInternalAlt(entities); + } else { + saveTimer = $timeout(function () { + saveChangesInternalAlt(entities); + }, delay); + return saveTimer; + } + + // TODO Is it necessary to cancel the timer at the end of the service, like this ? + + //// When the DOM element is removed from the page, + //// AngularJS will trigger the $destroy event on + //// the scope. This gives us a chance to cancel any + //// pending timer that we may have. + //$scope.$on("$destroy", function (event) { + // $timeout.cancel(increaseMultiplierTimeoutInitial); + // $timeout.cancel(increaseMultiplierTimeoutRecursive); + //}); + } + + function saveChangesInternalAlt(entities) { + + var count = entities.length; // getChangesCount(); + var promise = null; + var saveBatches = prepareSaveBatches(entities); + saveBatches.forEach(function (batch) { + + // ignore empty batches (except 'null' which means "save everything else") + if (batch === null || batch.length > 0) { + + // Broadcast, so UI can block + $rootScope.$broadcast('saveChangesStart'); + + promise = promise ? + promise.then(function () { return manager.saveChanges(batch); }) : + manager.saveChanges(batch); + } + }); + return promise.then(success).catch(failed).finally(completed); + + function success(result) { + logger.logSuccess('Saved ' + count + ' change(s)'); + return result; + } + + function failed(error) { + if (typeof error.status !== 'undefined' && error.status === '409') { + logger.logError('Save failed!
The record you attempted to edit was modified by another user after you got the original value. The edit operation was canceled.', error, true); + } else if (typeof error.entityErrors !== 'undefined') { + + var errorMessage = 'Save failed!
'; + + for (var key in error.entityErrors) { + var entityError = error.entityErrors[key]; + errorMessage += entityError.errorMessage + '
'; + } + + logger.logError(errorMessage, null, true); + + } else { + logger.logError('Save failed!', error, true); + } + + return $q.reject(error); // pass error along to next handler + } + + function completed() { + + // Broadcast, so UI can unblock + $rootScope.$broadcast('saveChangesCompleted'); + } + + function prepareSaveBatches(entities) { + + var batches = []; + + // RowVersion fix + // TODO How about Deleted state? + var modifiedEntities = []; + entities.forEach(function (entity) { + if (entity.entityAspect.entityState.isModified()) { + var rowVersion = entity.RowVersion; + entity.RowVersion = ''; + entity.RowVersion = rowVersion; + modifiedEntities.push(entity); + } + }); + batches.push(modifiedEntities); + + /* Aaargh! + * Web API OData doesn't calculate the proper save order + * which means, if we aren't careful on the client, + * we could save a new TodoItem before we saved its parent new TodoList + * or delete the parent TodoList before saving its deleted child TodoItems. + * OData says it is up to the client to save entities in the order + * required by referential constraints of the database. + * While we could save each time you make a change, that sucks. + * So we'll divvy up the pending changes into 4 batches + * 1. Deleted Todos + * 2. Deleted TodoLists + * 3. Added TodoLists + * 4. Every other change + */ + + batches.push(getEntities(entities, 'UserElementCell', breeze.EntityState.Deleted)); + batches.push(getEntities(entities, 'ElementCell', breeze.EntityState.Deleted)); + batches.push(getEntities(entities, 'ElementItem', breeze.EntityState.Deleted)); + batches.push(getEntities(entities, 'UserElementField', breeze.EntityState.Deleted)); + batches.push(getEntities(entities, 'ElementField', breeze.EntityState.Deleted)); + batches.push(getEntities(entities, 'Element', breeze.EntityState.Deleted)); + batches.push(getEntities(entities, 'UserResourcePool', breeze.EntityState.Deleted)); + batches.push(getEntities(entities, 'ResourcePool', breeze.EntityState.Deleted)); + + batches.push(getEntities(entities, 'ResourcePool', breeze.EntityState.Added)); + batches.push(getEntities(entities, 'UserResourcePool', breeze.EntityState.Added)); + batches.push(getEntities(entities, 'Element', breeze.EntityState.Added)); + batches.push(getEntities(entities, 'ElementField', breeze.EntityState.Added)); + batches.push(getEntities(entities, 'UserElementField', breeze.EntityState.Added)); + batches.push(getEntities(entities, 'ElementItem', breeze.EntityState.Added)); + batches.push(getEntities(entities, 'ElementCell', breeze.EntityState.Added)); + batches.push(getEntities(entities, 'UserElementCell', breeze.EntityState.Added)); + + function getEntities(entities, typeName, entityState) { + var result = []; + + entities.forEach(function (entity) { + if (entity.entityType.shortName === typeName && entity.entityAspect.entityState === entityState) { + result.push(entity); + } + }); + + return result; + } + + // batches.push(null); // empty = save all remaining pending changes + + return batches; + /* + * No we can't flatten into one request because Web API OData reorders + * arbitrarily, causing the database failure we're trying to avoid. + */ + } + } + + // When the user interact with the application without registering or login in, + // it creates an anonymous user and all entity creations done by this user + // If the user has actually an account and logs in afterwards, this function moves all those changes to that logged in user + function updateAnonymousChanges(anonymousUser, newUser) { + + var deferred = $q.defer(); + + if (typeof anonymousUser === 'undefined' || anonymousUser === null) { + deferred.reject('anonymousUser parameter cannot be undefined or null'); + } + + if (typeof newUser === 'undefined' || newUser === null) { + deferred.reject('newUser parameter cannot be undefined or null'); + } + + var existingEntityPromises = []; + anonymousUser.UserResourcePoolSet.forEach(function (userResourcePool) { + var keyValues = [newUser.Id, userResourcePool.ResourcePoolId]; + var promise = fetchEntityByKey('UserResourcePool', keyValues); + existingEntityPromises.push(promise); + }); + + anonymousUser.UserElementFieldSet.forEach(function (userElementField) { + var keyValues = [newUser.Id, userElementField.ElementFieldId]; + var promise = fetchEntityByKey('UserElementField', keyValues); + existingEntityPromises.push(promise); + }); + + anonymousUser.UserElementCellSet.forEach(function (userElementCell) { + var keyValues = [newUser.Id, userElementCell.ElementCellId]; + var promise = fetchEntityByKey('UserElementCell', keyValues); + existingEntityPromises.push(promise); + }); + + $q.all(existingEntityPromises).then(function () { + + // Resource pools + anonymousUser.ResourcePoolSet.forEach(function (anonymousResourcePool) { + anonymousResourcePool.User = newUser; + }); + + // User resource pools + var userResourcePoolSet = anonymousUser.UserResourcePoolSet.slice(); + userResourcePoolSet.forEach(function (anonymousUserResourcePool) { + + var result = newUser.UserResourcePoolSet.filter(function (userResourcePool) { + return userResourcePool.ResourcePoolId === anonymousUserResourcePool.ResourcePoolId; + }); + + if (result.length > 0) { // If there is an existing entity, update it and remove the anonymous one + result[0].ResourcePoolRate = anonymousUserResourcePool.ResourcePoolRate; + anonymousUserResourcePool.entityAspect.rejectChanges(); + } else { // Otherwise update the anonymous one with the new user + anonymousUserResourcePool.User = newUser; + } + }); + + // User element fields + var userElementFieldSet = anonymousUser.UserElementFieldSet.slice(); + userElementFieldSet.forEach(function (anonymousUserElementField) { + + // If existing entity, then make it modified + var result = newUser.UserElementFieldSet.filter(function (userElementField) { + return userElementField.ElementFieldId === anonymousUserElementField.ElementFieldId; + }); + + if (result.length > 0) { // If there is an existing entity, update it and remove the anonymous one + result[0].Rating = anonymousUserElementField.Rating; + anonymousUserElementField.entityAspect.rejectChanges(); + } else { // Otherwise update the anonymous one with the new user + anonymousUserElementField.User = newUser; + } + }); + + // User element cells + var userElementCellSet = anonymousUser.UserElementCellSet.slice(); + userElementCellSet.forEach(function (anonymousUserElementCell) { + + // If existing entity, then make it modified + var result = newUser.UserElementCellSet.filter(function (userElementCell) { + return userElementCell.ElementCellId === anonymousUserElementCell.ElementCellId; + }); + + if (result.length > 0) { // If there is an existing entity, update it and remove the anonymous one + result[0].StringValue = anonymousUserElementCell.StringValue; + result[0].BooleanValue = anonymousUserElementCell.BooleanValue; + result[0].IntegerValue = anonymousUserElementCell.IntegerValue; + result[0].DecimalValue = anonymousUserElementCell.DecimalValue; + result[0].DateTimeValue = anonymousUserElementCell.DateTimeValue; + anonymousUserElementCell.entityAspect.rejectChanges(); + } else { // Otherwise update the anonymous one with the new user + anonymousUserElementCell.User = newUser; + } + }); + + // Remove the old (anonymous) user + anonymousUser.entityAspect.rejectChanges(); + + deferred.resolve(); + }); + + return deferred.promise; + } + } +})(); +/*** + * Service: entityManagerFactory + * + * Configures BreezeJS and creates new instance(s) of the + * BreezeJS EntityManager for use in a 'dataContext' service + * + ***/ +(function () { + 'use strict'; + + var factoryId = 'entityManagerFactory'; + angular.module('main') + .factory(factoryId, ['breeze', + 'Element', + 'ElementCell', + 'ElementField', + 'ElementItem', + 'ResourcePool', + 'User', + 'UserElementCell', + 'UserElementField', + 'UserResourcePool', + '$rootScope', + 'serviceAppUrl', + 'logger', + entityManagerFactory]); + + function entityManagerFactory(breeze, + Element, + ElementCell, + ElementField, + ElementItem, + ResourcePool, + User, + UserElementCell, + UserElementField, + UserResourcePool, + $rootScope, + serviceAppUrl, + logger) { + + // Logger + logger = logger.forSource(factoryId); + + // var serviceRoot = window.location.protocol + '//localhost:15001/'; + var serviceRoot = serviceAppUrl; + var serviceName = serviceRoot + '/odata'; + var factory = { + newManager: newManager, + serviceName: serviceName + }; + + return factory; + + function newManager() { + var manager = new breeze.EntityManager(serviceName); + var store = manager.metadataStore; + + store.registerEntityTypeCtor('Element', Element); + store.registerEntityTypeCtor('ElementCell', ElementCell); + store.registerEntityTypeCtor('ElementField', ElementField); + store.registerEntityTypeCtor('ElementItem', ElementItem); + store.registerEntityTypeCtor('ResourcePool', ResourcePool); + store.registerEntityTypeCtor('User', User); + store.registerEntityTypeCtor('UserElementCell', UserElementCell); + store.registerEntityTypeCtor('UserElementField', UserElementField); + store.registerEntityTypeCtor('UserResourcePool', UserResourcePool); + + return manager; + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'locationHistory'; + angular.module('main') + .factory(factoryId, ['resourcePoolFactory', '$q', 'logger', locationHistory]); + + function locationHistory(resourcePoolFactory, $q, logger) { + + // Logger + logger = logger.forSource(factoryId); + + var self = { + history: [new LocationItem('/')], + historyLimit: 10 + }; + + var factory = { + createItem: createItem, + getHistory: getHistory, + previousItem: previousItem + }; + + // Return + return factory; + + /*** Implementations ***/ + + function createItem($location, $routeCurrent) { + + var deferred = $q.defer(); + + // TODO Try to use only routeCurrent? + var itemUrl = $location.url(); + var accessType = $routeCurrent.accessType; + var resourcePoolId = $routeCurrent.params.resourcePoolId; + var isEdit = $location.path().substring($location.path().lastIndexOf('/') + 1) === 'edit'; + + if (typeof resourcePoolId !== 'undefined') { + resourcePoolFactory.getResourcePool(resourcePoolId).then(createItemInternal); + } else { + createItemInternal(); + } + + function createItemInternal(resourcePool) { + var item = new LocationItem(itemUrl, accessType, resourcePool, isEdit); + self.history.push(item); + + // Only keep limited number of items + if (self.history.length > self.historyLimit) { + self.history.splice(0, self.history.length - self.historyLimit); + } + + deferred.resolve(); + } + + return deferred.promise; + } + + function getHistory() { + return self.history.slice(); + } + + function previousItem(excludeAccessType) { + excludeAccessType = typeof excludeAccessType !== 'undefined' ? excludeAccessType : ''; + + for (var i = self.history.length - 2; i >= 0; i--) { + var item = self.history[i]; + + if (excludeAccessType === '' || excludeAccessType !== item.accessType) { + return item; + } + } + } + + function LocationItem(itemUrl, accessType, resourcePool, isEdit) { + itemUrl = typeof itemUrl !== 'undefined' ? itemUrl : ''; + accessType = typeof accessType !== 'undefined' ? accessType : 'undefined'; + resourcePool = typeof resourcePool !== 'undefined' ? resourcePool : null; + isEdit = typeof isEdit !== 'undefined' ? isEdit : false; + + var self = this; + self.itemUrl = itemUrl; + self.accessType = accessType; + self.resourcePool = resourcePool; + self.isEdit = isEdit; + self.url = url; + + function url() { + return self.resourcePool !== null ? + self.isEdit ? + '/_system/resourcePool/' + self.resourcePool.Id + '/edit' : + '/_system/resourcePool/' + self.resourcePool.Id : + self.itemUrl; + } + } + } +})(); +/*** + * Service: logger + * + * Provides semantic logging services with help of + * Angular's $log service that writes to the console and + * John Papa's 'toastr.js': https://github.com/CodeSeven/toastr + * + ***/ +(function () { + 'use strict'; + + angular.module('main') + .factory('logger', ['$log', logger]); + + function logger($log) { + configureToastr(); + + var factory = { + forSource: forSource, + log: log, + logError: logError, + logInfo: logInfo, + logSuccess: logSuccess, + logWarning: logWarning + }; + + return factory; + + function configureToastr() { + toastr.options = { + "positionClass": "toast-bottom-right" + }; + } + + function forSource(src) { + return { + log: function (m, d, s, t, o) { return log(m, d, src, s, t, o); }, + logError: function (m, d, s, t, o) { return logError(m, d, src, s, t, o); }, + logInfo: function (m, d, s, t, o) { return logInfo(m, d, src, s, t, o); }, + logSuccess: function (m, d, s, t, o) { return logSuccess(m, d, src, s, t, o); }, + logWarning: function (m, d, s, t, o) { return logWarning(m, d, src, s, t, o); }, + }; + } + + function log(message, data, source, showToast, title, optionsOverride) { + return logIt(message, data, source, showToast, title, optionsOverride, 'debug'); + } + + function logError(message, data, source, showToast, title, optionsOverride) { + return logIt(message, data, source, showToast, title, optionsOverride, 'error'); + } + + function logInfo(message, data, source, showToast, title, optionsOverride) { + return logIt(message, data, source, showToast, title, optionsOverride, 'info'); + } + + function logSuccess(message, data, source, showToast, title, optionsOverride) { + return logIt(message, data, source, showToast, title, optionsOverride, 'success'); + } + + function logWarning(message, data, source, showToast, title, optionsOverride) { + return logIt(message, data, source, showToast, title, optionsOverride, 'warning'); + } + + function logIt(message, data, source, showToast, title, optionsOverride, toastType) { + showToast = typeof showToast === 'undefined' ? false : showToast; + var currentDateTime = new Date().getHours() + ':' + + new Date().getMinutes() + ':' + + new Date().getSeconds(); + source = source ? '[' + source + '] ' : ''; + var write; + switch (toastType) { + case 'debug': write = $log.debug; break; + case 'error': write = $log.error; break; + case 'info': write = $log.info; break; + case 'success': write = $log.log; break; + case 'warning': write = $log.warn; break; + } + write(currentDateTime, source, message, data); + var toast = null; + if (showToast) { + switch (toastType) { + case 'debug': toast = toastr.info(message, title, optionsOverride); break; + case 'error': toast = toastr.error(message, title, optionsOverride); break; + case 'info': toast = toastr.info(message, title, optionsOverride); break; + case 'success': toast = toastr.success(message, title, optionsOverride); break; + case 'warning': toast = toastr.warning(message, title, optionsOverride); break; + } + } + return toast; + } + } +})(); +(function () { + 'use strict'; + + var factoryId = 'resourcePoolFactory'; + angular.module('main') + .config(['$provide', extendFactory]); + + function extendFactory($provide) { + $provide.decorator(factoryId, ['$delegate', 'ResourcePool', 'Element', 'userFactory', 'dataContext', '$rootScope', 'logger', resourcePoolFactory]); + } + + function resourcePoolFactory($delegate, ResourcePool, Element, userFactory, dataContext, $rootScope, logger) { + + // Logger + logger = logger.forSource(factoryId); + + var fetched = []; + + // Factory methods + $delegate.acceptChanges = acceptChanges; + $delegate.cancelResourcePool = cancelResourcePool; + $delegate.copyResourcePool = copyResourcePool; + $delegate.createElement = createElement; + $delegate.createElementField = createElementField; + $delegate.createElementItem = createElementItem; + $delegate.createResourcePoolBasic = createResourcePoolBasic; + $delegate.createResourcePoolDirectIncomeAndMultiplier = createResourcePoolDirectIncomeAndMultiplier; + $delegate.createResourcePoolTwoElements = createResourcePoolTwoElements; + $delegate.getResourcePoolExpanded = getResourcePoolExpanded; + $delegate.removeElement = removeElement; + $delegate.removeElementField = removeElementField; + $delegate.removeElementItem = removeElementItem; + $delegate.removeResourcePool = removeResourcePool; + + // User logged out + $rootScope.$on('userFactory_currentUserChanged', function () { + fetched = []; + }); + + return $delegate; + + /*** Implementations ***/ + + function acceptChanges(resourcePool) { + + // Set isAdded flag to true, so before saving it to database, + // we can replace resource pool and its child entities state back to 'isAdded' + if (resourcePool.entityAspect.entityState.isAdded()) { + resourcePool.isAdded(true); + } + + // Resource pool itself + resourcePool.entityAspect.acceptChanges(); + + // If isAdded, then make it modified, so it be retrieved when getChanges() called + if (resourcePool.isAdded()) { + resourcePool.entityAspect.setModified(); + } + + // User resource pools + resourcePool.UserResourcePoolSet.forEach(function (userResourcePool) { + userResourcePool.entityAspect.acceptChanges(); + }); + + // Elements + resourcePool.ElementSet.forEach(function (element) { + element.entityAspect.acceptChanges(); + + // Fields + element.ElementFieldSet.forEach(function (elementField) { + elementField.entityAspect.acceptChanges(); + + // User element fields + elementField.UserElementFieldSet.forEach(function (userElementField) { + userElementField.entityAspect.acceptChanges(); + }); + }); + + // Items + element.ElementItemSet.forEach(function (elementItem) { + elementItem.entityAspect.acceptChanges(); + + // Cells + elementItem.ElementCellSet.forEach(function (elementCell) { + elementCell.entityAspect.acceptChanges(); + + // User cells + elementCell.UserElementCellSet.forEach(function (userElementCell) { + userElementCell.entityAspect.acceptChanges(); + }); + }); + }); + }); + } + + function cancelResourcePool(resourcePool) { + + // Resource pool itself + resourcePool.entityAspect.rejectChanges(); + + // User resource pools + resourcePool.UserResourcePoolSet.forEach(function (userResourcePool) { + userResourcePool.entityAspect.rejectChanges(); + }); + + // Elements + resourcePool.ElementSet.forEach(function (element) { + element.entityAspect.rejectChanges(); + + // Fields + element.ElementFieldSet.forEach(function (elementField) { + elementField.entityAspect.rejectChanges(); + + // User element fields + elementField.UserElementFieldSet.forEach(function (userElementField) { + userElementField.entityAspect.rejectChanges(); + }); + }); + + // Items + element.ElementItemSet.forEach(function (elementItem) { + elementItem.entityAspect.rejectChanges(); + + // Cells + elementItem.ElementCellSet.forEach(function (elementCell) { + elementCell.entityAspect.rejectChanges(); + + // User cells + elementCell.UserElementCellSet.forEach(function (userElementCell) { + userElementCell.entityAspect.rejectChanges(); + }); + }); + }); + }); + } + + function copyResourcePool(resourcePoolSource) { + // TODO + } + + function createElement(element) { + return dataContext.createEntity('Element', element); + } + + function createElementCell(elementCellInitial) { + + var elementCell = dataContext.createEntity('ElementCell', elementCellInitial); + + // User element cell + if (elementCell.ElementField.DataType !== 6) { + + var userElementCell = { + User: elementCell.ElementField.Element.ResourcePool.User, + ElementCell: elementCell + }; + + switch (elementCell.ElementField.DataType) { + case 1: { userElementCell.StringValue = ''; break; } + case 2: { userElementCell.BooleanValue = false; break; } + case 3: { userElementCell.IntegerValue = 0; break; } + case 4: { userElementCell.DecimalValue = 50; break; } + // TODO 5 (DateTime?) + case 11: { userElementCell.DecimalValue = 100; break; } + case 12: { userElementCell.DecimalValue = 0; break; } + } + + dataContext.createEntity('UserElementCell', userElementCell); + } + + return elementCell; + } + + function createElementField(elementField) { + + elementField = dataContext.createEntity('ElementField', elementField); + + // Related cells + elementField.Element.ElementItemSet.forEach(function (elementItem) { + createElementCell({ + ElementField: elementField, + ElementItem: elementItem + }); + }); + + return elementField; + } + + function createElementItem(elementItem) { + + elementItem = dataContext.createEntity('ElementItem', elementItem); + + // Related cells + elementItem.Element.ElementFieldSet.forEach(function (elementField) { + createElementCell({ + ElementField: elementField, + ElementItem: elementItem + }); + }); + + return elementItem; + } + + function createResourcePoolBasic(initializeResourcePool) { + initializeResourcePool = typeof initializeResourcePool !== 'undefined' ? initializeResourcePool : false; + + return userFactory.getCurrentUser() + .then(function (currentUser) { + + var resourcePoolRate = 10; + + var resourcePool = dataContext.createEntity('ResourcePool', { + User: currentUser, + Name: 'New CMRP', + InitialValue: 100, + UseFixedResourcePoolRate: true + }); + + dataContext.createEntity('UserResourcePool', { + User: currentUser, + ResourcePool: resourcePool, + ResourcePoolRate: resourcePoolRate + }); + + var element = createElement({ + ResourcePool: resourcePool, + Name: 'New element' + }); + element.IsMainElement = true; + + // Importance field (index) + var importanceField = createElementField({ + Element: element, + Name: 'Importance', + DataType: 4, + UseFixedValue: false, + IndexEnabled: true, + IndexCalculationType: 2, + IndexSortType: 1, + SortOrder: 1 + }); + + // Item 1 + var item1 = createElementItem({ + Element: element, + Name: 'New item 1' + }); + + // Item 2 + var item2 = createElementItem({ + Element: element, + Name: 'New item 2' + }); + + // Initialize + if (initializeResourcePool) { + resourcePool._init(true); + } + + return resourcePool; + }); + } + + function createResourcePoolDirectIncomeAndMultiplier(initializeResourcePool) { + initializeResourcePool = typeof initializeResourcePool !== 'undefined' ? initializeResourcePool : false; + + return createResourcePoolBasic() + .then(function (resourcePool) { + + // Convert Importance field to Sales Price field + var salesPriceField = resourcePool.mainElement().ElementFieldSet[0]; + salesPriceField.Name = 'Sales Price'; + salesPriceField.DataType = 11; + salesPriceField.UseFixedValue = true; + salesPriceField.IndexEnabled = false; + salesPriceField.IndexCalculationType = 0; + salesPriceField.IndexSortType = 0; + + // Update Sales Price field cells + var cell1 = salesPriceField.ElementCellSet[0]; + var cell2 = salesPriceField.ElementCellSet[1]; + + // Number of Sales field + var numberOfSalesField = createElementField({ + Element: resourcePool.mainElement(), + Name: 'Number of Sales', + DataType: 12, + UseFixedValue: false, + SortOrder: 2 + }); + + if (initializeResourcePool) { + resourcePool._init(true); + } + + return resourcePool; + }); + } + + function createResourcePoolTwoElements(initializeResourcePool) { + initializeResourcePool = typeof initializeResourcePool !== 'undefined' ? initializeResourcePool : false; + + return createResourcePoolBasic() + .then(function (resourcePool) { + + // Element 2 & items + var element2 = resourcePool.ElementSet[0]; + element2.Name = 'Child'; + + var element2Item1 = element2.ElementItemSet[0]; + var element2Item2 = element2.ElementItemSet[1]; + + // Element 1 + var element1 = createElement({ + ResourcePool: resourcePool, + Name: 'Parent' + }); + element1.IsMainElement = true; + + // Child field (second element) + var childField = createElementField({ + Element: element1, + Name: 'Child', + DataType: 6, + SelectedElement: element2, + UseFixedValue: true, + SortOrder: 1 + }); + + // Item 1 + var item1 = createElementItem({ + Element: element1, + Name: 'Parent 1' + }); + + // Item 1 Cell + item1.ElementCellSet[0].SelectedElementItem = element2Item1; + + // Item 2 + var item2 = createElementItem({ + Element: element1, + Name: 'Parent 2' + }); + + // Item 2 Cell + item2.ElementCellSet[0].SelectedElementItem = element2Item2; + + if (initializeResourcePool) { + resourcePool._init(true); + } + + return resourcePool; + }); + } + + function getResourcePoolExpanded(resourcePoolId) { + // TODO Other validations? + resourcePoolId = Number(resourcePoolId); + + return userFactory.getCurrentUser() + .then(function (currentUser) { + + // Prepare the query + var query = null; + var isNewResourcePool = resourcePoolId <= 0; // Determines whether this is just created by this user, or an existing resource pool + var fetchedEarlier = false; + var fromServer = false; + + // If it's not newly created, check the fetched list + if (!isNewResourcePool) { + fetchedEarlier = fetched.some(function (fetchedId) { + return resourcePoolId === fetchedId; + }); + } + + fromServer = !isNewResourcePool && !fetchedEarlier; + + // Is authorized? No, then get only the public data, yes, then get include user's own records + if (currentUser.isAuthenticated() || isNewResourcePool) { + query = breeze.EntityQuery + .from('ResourcePool') + .expand('UserResourcePoolSet, ElementSet.ElementFieldSet.UserElementFieldSet, ElementSet.ElementItemSet.ElementCellSet.UserElementCellSet') + .where('Id', 'eq', resourcePoolId); + } else { + query = breeze.EntityQuery + .from('ResourcePool') + .expand('ElementSet.ElementFieldSet, ElementSet.ElementItemSet.ElementCellSet') + .where('Id', 'eq', resourcePoolId); + } + + // From server or local? + if (fromServer) { + query = query.using(breeze.FetchStrategy.FromServer); + } + else { + query = query.using(breeze.FetchStrategy.FromLocalCache); + } + + return dataContext.executeQuery(query) + .then(success) + .catch(failed); + + function success(response) { + + // If there is no cmrp with this Id, return null + if (response.results.length === 0) { + return null; + } + + // ResourcePool + var resourcePool = response.results[0]; + + // Init + if (fromServer) { + resourcePool._init(); + } + + // Add the record into fetched list + fetched.push(resourcePool.Id); + + return resourcePool; + } + + function failed(error) { + var message = error.message || 'ResourcePool query failed'; + logger.logError(message, error, true); + } + }); + } + + function removeElement(element) { + + // Remove from selectedElement + if (element.ResourcePool.selectedElement() === element) { + element.ResourcePool.selectedElement(null); + } + + // Related items + var elementItemSet = element.ElementItemSet.slice(); + elementItemSet.forEach(function (elementItem) { + removeElementItem(elementItem); + }); + + // Related fields + var elementFieldSet = element.ElementFieldSet.slice(); + elementFieldSet.forEach(function (elementField) { + removeElementField(elementField); + }); + + element.entityAspect.setDeleted(); + } + + function removeElementCell(elementCell) { + + // Related user cells + var userElementCellSet = elementCell.UserElementCellSet.slice(); + userElementCellSet.forEach(function (userElementCell) { + userElementCell.entityAspect.setDeleted(); + }); + + elementCell.entityAspect.setDeleted(); + } + + function removeElementField(elementField) { + + // Related cells + var elementCellSet = elementField.ElementCellSet.slice(); + elementCellSet.forEach(function (elementCell) { + removeElementCell(elementCell); + }); + + // Related user element fields + var userElementFieldSet = elementField.UserElementFieldSet.slice(); + userElementFieldSet.forEach(function (userElementField) { + userElementField.entityAspect.setDeleted(); + }); + + elementField.entityAspect.setDeleted(); + } + + function removeElementItem(elementItem) { + + // Related cells + var elementCellSet = elementItem.ElementCellSet.slice(); + elementCellSet.forEach(function (elementCell) { + removeElementCell(elementCell); + }); + + elementItem.entityAspect.setDeleted(); + } + + function removeResourcePool(resourcePool) { + + // Related elements + var elementSet = resourcePool.ElementSet.slice(); + elementSet.forEach(function (element) { + removeElement(element); + }); + + // Related user resource pools + var userResourcePoolSet = resourcePool.UserResourcePoolSet.slice(); + userResourcePoolSet.forEach(function (userResourcePool) { + userResourcePool.entityAspect.setDeleted(); + }); + + resourcePool.entityAspect.setDeleted(); + } + } +})(); + +(function () { + 'use strict'; + + var factoryId = 'userFactory'; + angular.module('main') + .config(['$provide', extendFactory]); + + function extendFactory($provide) { + $provide.decorator(factoryId, ['$delegate', 'dataContext', '$http', '$q', '$rootScope', '$window', '$location', 'serviceAppUrl', 'logger', userFactory]); + } + + function userFactory($delegate, dataContext, $http, $q, $rootScope, $window, $location, serviceAppUrl, logger) { + logger = logger.forSource(factoryId); + + // Service urls + var addPasswordUrl = serviceAppUrl + '/api/Account/AddPassword'; + var changeEmailUrl = serviceAppUrl + '/api/Account/ChangeEmail'; + var changePasswordUrl = serviceAppUrl + '/api/Account/ChangePassword'; + var confirmEmailUrl = serviceAppUrl + '/api/Account/ConfirmEmail'; + var currentUser = null; + var getCurrentUserPromise = null; + var registerUrl = serviceAppUrl + '/api/Account/Register'; + var resendConfirmationEmailUrl = serviceAppUrl + '/api/Account/ResendConfirmationEmail'; + var resetPasswordUrl = serviceAppUrl + '/api/Account/ResetPassword'; + var resetPasswordRequestUrl = serviceAppUrl + '/api/Account/ResetPasswordRequest'; + var tokenUrl = serviceAppUrl + '/api/Token'; + + // Service methods + $delegate.addPassword = addPassword; + $delegate.changeEmail = changeEmail; + $delegate.changePassword = changePassword; + $delegate.confirmEmail = confirmEmail; + $delegate.getCurrentUser = getCurrentUser; + $delegate.getToken = getToken; + $delegate.logout = logout; + $delegate.register = register; + $delegate.resendConfirmationEmail = resendConfirmationEmail; + $delegate.resetPassword = resetPassword; + $delegate.resetPasswordRequest = resetPasswordRequest; + + $delegate.updateElementMultiplier = updateElementMultiplier; + $delegate.updateElementCellMultiplier = updateElementCellMultiplier; + $delegate.updateElementCellNumericValue = updateElementCellNumericValue; + $delegate.updateElementFieldIndexRating = updateElementFieldIndexRating; + $delegate.updateResourcePoolRate = updateResourcePoolRate; + + _init(); + + function _init() { + getCurrentUser() + .then(function () { + broadcastUserChanged(); + }); + } + + return $delegate; + + /*** Implementations ***/ + + function addPassword(addPasswordBindingModel) { + return $http.post(addPasswordUrl, addPasswordBindingModel) + .success(function (updatedUser) { + + // Remove 'HasNoPassword' claim + var claimIndex = null; + for (var i = 0; i < currentUser.Claims.length; i++) { + if (currentUser.Claims[i].ClaimType === 'HasNoPassword') { + claimIndex = i; + break; + } + } + + if (claimIndex === null) { + // TODO throw error? + } + + var claims = currentUser.Claims.splice(claimIndex, 1); + claims[0].entityAspect.setDetached(); + + // Sync RowVersion fields + syncRowVersion(currentUser, updatedUser); + }) + .error(handleErrorResult); + } + + function changeEmail(changeEmailBindingModel) { + return $http.post(changeEmailUrl, changeEmailBindingModel) + .success(function (updatedUser) { + + currentUser.Email = updatedUser.Email; + currentUser.EmailConfirmed = false; + + // Sync RowVersion fields + syncRowVersion(currentUser, updatedUser); + }) + .error(handleErrorResult); + } + + function changePassword(changePasswordBindingModel) { + return $http.post(changePasswordUrl, changePasswordBindingModel) + .success(function (updatedUser) { + // Sync RowVersion fields + syncRowVersion(currentUser, updatedUser); + }) + .error(handleErrorResult); + } + + function confirmEmail(confirmEmailBindingModel) { + return $http.post(confirmEmailUrl, confirmEmailBindingModel) + .success(function (updatedUser) { + + currentUser.EmailConfirmed = true; + + // Sync RowVersion fields + syncRowVersion(currentUser, updatedUser); + }) + .error(handleErrorResult); + } + + function getToken(email, password, rememberMe, tempToken, isRegister) { + isRegister = typeof isRegister === 'undefined' ? false : isRegister; + + var deferred = $q.defer(); + + var tokenData = 'grant_type=password' + + '&username=' + email + + '&password=' + password + + '&rememberMe=' + rememberMe + + '&tempToken=' + (typeof tempToken !== 'undefined' ? tempToken : ''); + + $http.post(tokenUrl, tokenData, { 'Content-Type': 'application/x-www-form-urlencoded' }) + .success(function (token) { + + // Set token to the session + $window.localStorage.setItem('token', angular.toJson(token)); + + // Set currentUser as the old one. + // In case if this is coming from login page, anonymous changes will be merged/copied into logged in user + var oldUser = currentUser; + + getCurrentUser(!isRegister) + .then(function () { + + if (isRegister) { + + // Raise logged in event + broadcastUserChanged(); + + // Update anonymous entities + currentUser.ResourcePoolSet.forEach(function (resourcePool) { + resourcePool.updateAnonymousEntities(); + }); + + // Save the changes that's been done before the registration + dataContext.saveChanges() + .then(function () { + deferred.resolve(); + }); + } else { + + // Raise logged in event + broadcastUserChanged(); + + // Move anonymously created entities to this logged in user + dataContext.updateAnonymousChanges(oldUser, currentUser) + .then(function () { + + // Update anonymous entities + currentUser.ResourcePoolSet.forEach(function (resourcePool) { + resourcePool.updateAnonymousEntities(); + }); + + // Save changes + dataContext.saveChanges() + .then(function () { + deferred.resolve(); + }); + }); + } + }); + }) + .error(function (data, status, headers, config) { + handleErrorResult(data, status, headers, config); + deferred.reject(data); + }); + + return deferred.promise; + } + + // Returns either anonymous (not authenticated) or logged in user + function getCurrentUser(resetPromise) { + resetPromise = typeof resetPromise !== 'undefined' ? resetPromise : false; + + if (getCurrentUserPromise === null || resetPromise) { + + var deferred = $q.defer(); + getCurrentUserPromise = deferred.promise; + + if (localStorage.getItem('token') === null) { + + dataContext.metadataReady() + .then(function () { + var user = dataContext.createEntity('User', { isEditing: false }); + currentUser = user; + deferred.resolve(user); + }) + .catch(function () { + // TODO Handle? + }); + + } else { + var query = breeze.EntityQuery + .from('Users') + .expand('Claims') + .using(breeze.FetchStrategy.FromServer); + + dataContext.executeQuery(query) + .then(success) + .catch(failed); + } + } + + return getCurrentUserPromise; + + function success(response) { + + // If the response has an entity, use that, otherwise create an anonymous user + var user = response.results.length > 0 ? + response.results[0] : + dataContext.createEntity('User', { isEditing: false }); + + currentUser = user; + deferred.resolve(user); + } + + function failed(error) { + var message = error.message || 'User query failed'; + // TODO Handle this case better! + deferred.reject(message); + throw new Error(message); + } + } + + function getUserElementCell(user, elementCell) { + + var userCell = elementCell.currentUserCell(); + + if (userCell === null) { + + // Since there is a delay between client-side changes and actual save operation (editor.js - saveChanges(1500)), these entities might be deleted but not yet saved. + // To prevent having the exception of creating an entity with the same keys twice, search 'deleted' ones and restore it back to life! / SH - 02 Dec. '15 + var deletedUserCells = dataContext.getEntities(['UserElementCell'], [breeze.EntityState.Deleted]); + var userCells = deletedUserCells.filter(function (deletedUserCell) { + return deletedUserCell.UserId === user.Id && deletedUserCell.ElementCellId === elementCell.Id; + }); + + if (userCells.length > 0) { + userCell = userCells[0]; + userCell.entityAspect.rejectChanges(); + userCell.DecimalValue = elementCell.ElementField.DataType === 12 ? 0 : 50; // TODO ? + } + } + + return userCell; + } + + function getUserElementField(user, elementField) { + + var userField = elementField.currentUserElementField(); + + if (userField === null) { + + // Since there is a delay between client-side changes and actual save operation (editor.js - saveChanges(1500)), these entities might be deleted but not yet saved. + // To prevent having the exception of creating an entity with the same keys twice, search 'deleted' ones and restore it back to life! / SH - 02 Dec. '15 + var deletedUserFields = dataContext.getEntities(['UserElementField'], [breeze.EntityState.Deleted]); + var userFields = deletedUserFields.filter(function (deletedUserField) { + return deletedUserField.UserId === user.Id && deletedUserField.ElementFieldId === elementField.Id; + }); + + if (userFields.length > 0) { + userField = userFields[0]; + userField.entityAspect.rejectChanges(); + userField.Rating = 50; + } + } + + return userField; + } + + function getUserResourcePool(user, resourcePool) { + + var userResourcePool = resourcePool.currentUserResourcePool(); + + if (userResourcePool === null) { + + // Since there is a delay between client-side changes and actual save operation (editor.js - saveChanges(1500)), these entities might be deleted but not yet saved. + // To prevent having the exception of creating an entity with the same keys twice, search 'deleted' ones and restore it back to life! / SH - 02 Dec. '15 + var deletedUserResourcePools = dataContext.getEntities(['UserResourcePool'], [breeze.EntityState.Deleted]); + var userResourcePools = deletedUserResourcePools.filter(function (deletedUserResourcePool) { + return deletedUserResourcePool.UserId === user.Id && deletedUserResourcePool.ResourcePoolId === resourcePool.Id; + }); + + if (userResourcePools.length > 0) { + userResourcePool = userResourcePools[0]; + userResourcePool.entityAspect.rejectChanges(); + userResourcePool.ResourcePoolRate = 10; + } + } + + return userResourcePool; + } + + function handleErrorResult(data, status, headers, config) { + + // TODO Can this be done on a higher level? + var message = ''; + + if (typeof data.ModelState !== 'undefined') { + for (var key in data.ModelState) { + var array = data.ModelState[key]; + array.forEach(addErrorMessage); + } + } + + function addErrorMessage(error) { + message += error + '
'; + } + + if (message === '' && typeof data.Message !== 'undefined') { + message = data.Message; + } + + if (message === '' && typeof data.error_description !== 'undefined') { + message = data.error_description; + } + + logger.logError(message, null, true); + } + + function logout() { + + // Remove token from the session + $window.localStorage.removeItem('token'); + + // Clear breeze's metadata store + dataContext.clear(); + + // Raise logged out event + return getCurrentUser(true) + .then(function () { + broadcastUserChanged(); + }); + } + + function broadcastUserChanged() { + $rootScope.$broadcast('userFactory_currentUserChanged', currentUser); + } + + function register(registerBindingModel) { + return $http.post(registerUrl, registerBindingModel) + .success(function (newUser) { + + // breeze context user entity fix-up! + // TODO Try to make this part better, use OData method? + currentUser.Id = newUser.Id; + currentUser.Email = newUser.Email; + currentUser.UserName = newUser.UserName; + currentUser.RowVersion = newUser.RowVersion; + currentUser.entityAspect.acceptChanges(); + + return getToken(registerBindingModel.email, registerBindingModel.password, false, true); + }) + .error(handleErrorResult); + } + + function resendConfirmationEmail() { + return $http.post(resendConfirmationEmailUrl).error(handleErrorResult); + } + + function resetPassword(resetPasswordBindingModel) { + return $http.post(resetPasswordUrl, resetPasswordBindingModel) + .success(function (updatedUser) { + // Sync RowVersion fields + syncRowVersion(currentUser, updatedUser); + }) + .error(handleErrorResult); + } + + function resetPasswordRequest(resetPasswordRequestBindingModel) { + return $http.post(resetPasswordRequestUrl, resetPasswordRequestBindingModel).error(handleErrorResult); + } + + // When an entity gets updated through angular, unlike breeze updates, it doesn't sync RowVersion automatically + // After each update, call this function to sync the entities RowVersion with the server's. Otherwise it'll get Conflict error + // SH - 05 Jan. '16 + function syncRowVersion(oldEntity, newEntity) { + // TODO Validations? + oldEntity.RowVersion = newEntity.RowVersion; + } + + // These 'updateX' functions were defined in their related entities (user.js). + // Only because they had to use createEntity() on dataContext, it was moved to this service. + // Try do handle them in a better way, maybe by using broadcast? + + function updateElementMultiplier(element, updateType) { + + // Find user element cell + element.ElementItemSet.forEach(function (item) { + + var multiplierCell; + for (var cellIndex = 0; cellIndex < item.ElementCellSet.length; cellIndex++) { + var elementCell = item.ElementCellSet[cellIndex]; + if (elementCell.ElementField.DataType === 12) { + multiplierCell = elementCell; + break; + } + } + + updateElementCellMultiplierInternal(multiplierCell, updateType); + }); + + // Update related + + // Update items + element.ElementItemSet.forEach(function (item) { + item.setMultiplier(); + }); + + element.ElementFieldSet.forEach(function (field) { + + if (field.IndexEnabled) { + // Update numeric value cells + field.ElementCellSet.forEach(function (cell) { + cell.setNumericValueMultiplied(false); + }); + + // Update fields + field.setNumericValueMultiplied(); + } + }); + } + + function updateElementCellMultiplier(elementCell, updateType) { + + updateElementCellMultiplierInternal(elementCell, updateType); + + // Update items + elementCell.ElementField.Element.ElementItemSet.forEach(function (item) { + item.setMultiplier(); + }); + + if (elementCell.ElementField.IndexEnabled) { + // Update numeric value cells + elementCell.ElementField.ElementCellSet.forEach(function (cell) { + cell.setNumericValueMultiplied(false); + }); + + // Update fields + elementCell.ElementField.setNumericValueMultiplied(); + } + } + + function updateElementCellMultiplierInternal(elementCell, updateType) { + + var userCell = getUserElementCell(currentUser, elementCell); + + switch (updateType) { + case 'increase': + case 'decrease': { + + if (userCell === null) { // If there is no item, create it + + userCell = dataContext.createEntity('UserElementCell', { + User: currentUser, + ElementCell: elementCell, + DecimalValue: updateType === 'increase' ? 1 : 0, + isEditing: false + }); + + } else { // If there is an item, update DecimalValue, but cannot be lower than zero + + userCell.DecimalValue = updateType === 'increase' ? + userCell.DecimalValue + 1 : + userCell.DecimalValue - 1 < 0 ? 0 : userCell.DecimalValue - 1; + } + + break; + } + case 'reset': { + + if (userCell !== null) { // If there is an item, delete it + userCell.entityAspect.setDeleted(); + } + + break; + } + } + } + + function updateElementCellNumericValue(elementCell, updateType) { + + var userCell = getUserElementCell(currentUser, elementCell); + + switch (updateType) { + case 'increase': + case 'decrease': { + + if (userCell === null) { // If there is no item, create it + + dataContext.createEntity('UserElementCell', { + User: currentUser, + ElementCell: elementCell, + DecimalValue: updateType === 'increase' ? 55 : 45, + isEditing: false + }); + + } else { // If there is an item, update DecimalValue, but cannot be smaller than zero and cannot be bigger than 100 + + userCell.DecimalValue = updateType === 'increase' ? + userCell.DecimalValue + 5 > 100 ? 100 : userCell.DecimalValue + 5 : + userCell.DecimalValue - 5 < 0 ? 0 : userCell.DecimalValue - 5; + } + + // Update the cached value + elementCell.setCurrentUserNumericValue(); + + break; + } + case 'reset': { + + if (userCell !== null) { // If there is an item, delete it + userCell.entityAspect.setDeleted(); + + // Update the cached value + elementCell.setCurrentUserNumericValue(); + } + + break; + } + } + } + + function updateElementFieldIndexRating(elementField, updateType) { + + var userElementField = getUserElementField(currentUser, elementField); + + switch (updateType) { + case 'increase': + case 'decrease': { + + // If there is no item, create it + if (userElementField === null) { + userElementField = { + User: currentUser, + ElementField: elementField, + Rating: updateType === 'increase' ? 55 : 45, + isEditing: false + }; + + dataContext.createEntity('UserElementField', userElementField); + + } else { // If there is an item, update Rating, but cannot be smaller than zero and cannot be bigger than 100 + + userElementField.Rating = updateType === 'increase' ? + userElementField.Rating + 5 > 100 ? 100 : userElementField.Rating + 5 : + userElementField.Rating - 5 < 0 ? 0 : userElementField.Rating - 5; + } + + // Update the cached value + elementField.setCurrentUserIndexRating(); + + break; + } + case 'reset': { + + // If there is an item, delete it + if (userElementField !== null) { + userElementField.entityAspect.setDeleted(); + + // Update the cached value + elementField.setCurrentUserIndexRating(); + } + + break; + } + } + } + + function updateResourcePoolRate(resourcePool, updateType) { + + var userResourcePool = getUserResourcePool(currentUser, resourcePool); + + switch (updateType) { + case 'increase': + case 'decrease': { + + // If there is no item, create it + if (userResourcePool === null) { + userResourcePool = { + User: currentUser, + ResourcePool: resourcePool, + ResourcePoolRate: updateType === 'increase' ? 15 : 5, + isEditing: false + }; + + dataContext.createEntity('UserResourcePool', userResourcePool); + + } else { // If there is an item, update Rating, but cannot be smaller than zero and cannot be bigger than 1000 + + userResourcePool.ResourcePoolRate = updateType === 'increase' ? + userResourcePool.ResourcePoolRate + 5 > 1000 ? 1000 : userResourcePool.ResourcePoolRate + 5 : + userResourcePool.ResourcePoolRate - 5 < 0 ? 0 : userResourcePool.ResourcePoolRate - 5; + } + + // Update the cached value + resourcePool.setCurrentUserResourcePoolRate(); + + break; + } + case 'reset': { + + // If there is an item, delete it + if (userResourcePool !== null) { + userResourcePool.entityAspect.setDeleted(); + + // Update the cached value + resourcePool.setCurrentUserResourcePoolRate(); + } + + break; + } + } + } + } +})(); + +/*** + * Filter: enum + * + * Converts the enum value to its key by searching through tables in Enums.js + * + ***/ +(function () { + 'use strict'; + + angular.module('main') + .filter('enum', ['Enums', 'logger', function (Enums, logger) { + + return function (input, enumTableKey) { + + if (typeof input === 'undefined' || typeof enumTableKey === 'undefined' || enumTableKey === '') { + return null; + } + + return Enums.getEnumKey(enumTableKey, input); + }; + }]); + +})(); + +/*** + * Filter: numberSymbol + * + * Convert the number to a short format with symbol format. + * + ***/ +(function () { + 'use strict'; + + angular.module('main') + .filter('numberSymbol', ['$filter', 'logger', function ($filter, logger) { + return function (input, decimals) { + + if (typeof input === 'undefined') + return null; + + decimals = typeof decimals === 'undefined' ? 0 : decimals; + + var number = Number(input); + number = decimals > 0 ? number.toFixed(decimals) : number; + var symbol = ''; + + if (number / Math.pow(10, 12) >= 1) { // Trillion + number = number / Math.pow(10, 12); + symbol = 'T'; + } else if (number / Math.pow(10, 9) >= 1) { // Billion + number = number / Math.pow(10, 9); + symbol = 'B'; + } else if (number / Math.pow(10, 6) >= 1) { // Million + number = number / Math.pow(10, 6); + symbol = 'M'; + } else if (number / Math.pow(10, 3) >= 1) { // Thousand + number = number / Math.pow(10, 3); + symbol = 'K'; + } else { + number = number; + } + + return $filter('number')(number, decimals) + symbol; + }; + }]); + +})(); + +/*** + * Filter: percentage + * + * Convert the number to a percentage format. + * + ***/ +(function () { + 'use strict'; + + angular.module('main') + .filter('percentage', ['$filter', function ($filter) { + return function (input, decimals) { + // TODO Whether Percentage symbol should be in front or behind of the value differs based on cultural settings + return $filter('number')(input * 100, decimals) + '%'; + }; + }]); +})(); + +(function () { + 'use strict'; + + var controllerId = 'AccountEditController'; + angular.module('main') + .controller(controllerId, ['userFactory', 'logger', AccountEditController]); + + function AccountEditController(userFactory, logger) { + logger = logger.forSource(controllerId); + + var isSaving = false; + + // Controller methods (alphabetically) + var vm = this; + vm.cancelChanges = cancelChanges; + vm.isSaveDisabled = isSaveDisabled; + vm.user = null; + vm.saveChanges = saveChanges; + + // Get current user + userFactory.getCurrentUser() + .then(function (currentUser) { + vm.user = currentUser; + vm.user.isEditing = true; + }); + + /*** Implementations ***/ + + function cancelChanges() { + // TODO + } + + function isSaveDisabled() { + //return isSaving || (!userFactory.hasChanges()); + return isSaving; + } + + function saveChanges() { + + isSaving = true; + vm.user.isEditing = false; + userFactory.saveChanges() + .then(function (result) { + logger.logSuccess('Your changes have been saved!', null, true); + }) + .catch(function (error) { + + // Conflict (Concurrency exception) + if (error.status === '409') { + // TODO Try to recover! + } + }) + .finally(function () { + isSaving = false; + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'AddPasswordController'; + angular.module('main') + .controller(controllerId, ['userFactory', '$location', 'logger', AddPasswordController]); + + function AddPasswordController(userFactory, $location, logger) { + logger = logger.forSource(controllerId); + + var vm = this; + vm.addPassword = addPassword; + + function addPassword() { + userFactory.addPassword(vm) + .success(function () { + $location.url('/'); + logger.logSuccess('Your password has been set!', null, true); + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'ChangeEmailController'; + angular.module('main') + .controller(controllerId, ['userFactory', '$location', 'logger', ChangeEmailController]); + + function ChangeEmailController(userFactory, $location, logger) { + logger = logger.forSource(controllerId); + + var vm = this; + vm.isChangeEmailDisabled = false; + vm.changeEmail = changeEmail; + + _init(); + + function _init() { + + // Generate test data if localhost + if ($location.host() === 'localhost') { + var now = new Date(); + var year = now.getFullYear(); + var month = now.getMonth() + 1; + var day = now.getDate(); + var hour = now.getHours(); + var minute = now.getMinutes(); + var second = now.getSeconds(); + var email = 'local_' + year + month + day + '_' + hour + minute + second + '@forcrowd.org'; + + vm.email = email; + } + } + + function changeEmail() { + + vm.isChangeEmailDisabled = true; + + userFactory.changeEmail(vm) + .success(function () { + $location.url('/_system/account/confirmEmail'); + }) + .finally(function () { + vm.isChangeEmailDisabled = false; + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'ChangePasswordController'; + angular.module('main') + .controller(controllerId, ['userFactory', '$location', 'logger', ChangePasswordController]); + + function ChangePasswordController(userFactory, $location, logger) { + logger = logger.forSource(controllerId); + + var vm = this; + vm.changePassword = changePassword; + + function changePassword() { + userFactory.changePassword(vm) + .success(function () { + $location.url('/'); + logger.logSuccess('Your password has been changed!', null, true); + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'ConfirmEmailController'; + angular.module('main') + .controller(controllerId, ['userFactory', '$rootScope', '$location', 'logger', ConfirmEmailController]); + + function ConfirmEmailController(userFactory, $rootScope, $location, logger) { + logger = logger.forSource(controllerId); + + var vm = this; + vm.currentUser = { EmailConfirmed: false, isAuthenticated: function () { return false; } }; + vm.isResendDisabled = false; + vm.resendConfirmationEmail = resendConfirmationEmail; + + _init(); + + /*** Implementations ***/ + + function _init() { + + userFactory.getCurrentUser() + .then(function (currentUser) { + + vm.currentUser = currentUser; + + if (!vm.currentUser.isAuthenticated()) { + return; + } + + // If there is no token, no need to continue + var token = $location.search().token; + if (typeof token === 'undefined') { + return; + } + + userFactory.confirmEmail({ Token: token }); + }); + } + + function resendConfirmationEmail() { + + vm.isResendDisabled = true; + + userFactory.resendConfirmationEmail() + .then(function () { + logger.logSuccess('Confirmation email has been resent to your email address!', null, true); + }) + .finally(function () { + vm.isResendDisabled = false; + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'LoginController'; + angular.module('main') + .controller(controllerId, ['userFactory', '$location', 'locationHistory', 'serviceAppUrl', 'logger', LoginController]); + + function LoginController(userFactory, $location, locationHistory, serviceAppUrl, logger) { + logger = logger.forSource(controllerId); + + var vm = this; + vm.email = ''; + vm.login = login; + vm.getExternalLoginUrl = getExternalLoginUrl; + vm.password = ''; + vm.rememberMe = false; + + _init(); + + function _init() { + + // Error + var error = $location.search().error; + if (typeof error !== 'undefined') { + logger.logError(error, null, true); + return; + } + + login(); + } + + function login() { + + // External (temp token) login + var tempToken = $location.search().tempToken; + if (typeof tempToken !== 'undefined') { + userFactory.getToken('', '', vm.rememberMe, tempToken).then(success).catch(failedExternal); + } else { // Internal login + if (vm.email !== '' && vm.password !== '') { + userFactory.getToken(vm.email, vm.password, vm.rememberMe).then(success); + } + } + + function success() { + logger.logSuccess('You have been logged in!', null, true); + $location.url(getReturnUrl()); + } + + function failedExternal() { + logger.logError('Invalid token', null, true); + } + } + + function getExternalLoginUrl(provider) { + return serviceAppUrl + '/api/Account/ExternalLogin?provider=' + provider + '&clientReturnUrl=' + getReturnUrl(); + } + + function getReturnUrl() { + // If login pages called after a result from server, it will have "clientReturnUrl" param, which will have a higher priority than locationHistory + var clientReturnUrl = $location.search().clientReturnUrl; + return typeof clientReturnUrl !== 'undefined' ? clientReturnUrl : locationHistory.previousItem().url(); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'RegisterController'; + angular.module('main') + .controller(controllerId, ['userFactory', '$location', 'locationHistory', 'serviceAppUrl', 'logger', RegisterController]); + + function RegisterController(userFactory, $location, locationHistory, serviceAppUrl, logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + vm.confirmPassword = ''; + vm.email = ''; + vm.getExternalLoginUrl = getExternalLoginUrl; + vm.password = ''; + vm.register = register; + + _init(); + + function _init() { + // Generate test data if localhost + if ($location.host() === 'localhost') { + var now = new Date(); + var year = now.getFullYear(); + var month = now.getMonth() + 1; + var day = now.getDate(); + var hour = now.getHours(); + var minute = now.getMinutes(); + var second = now.getSeconds(); + var email = 'local_' + year + month + day + '_' + hour + minute + second + '@forcrowd.org'; + + vm.email = email; + vm.password = 'q1w2e3'; + vm.confirmPassword = 'q1w2e3'; + } + } + + function getExternalLoginUrl(provider) { + var returnUrl = locationHistory.previousItem().url(); + return serviceAppUrl + '/api/Account/ExternalLogin?provider=' + provider + '&clientReturnUrl=' + returnUrl; + } + + function register() { + userFactory.register(vm) + .success(function () { + logger.logSuccess('You have been registered!', null, true); + $location.url('/_system/account/confirmEmail'); + }) + .error(function (response) { + if (typeof response.error_description !== 'undefined') { + logger.logError(response.error_description, null, true); + } + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'ResetPasswordController'; + angular.module('main') + .controller(controllerId, ['userFactory', '$location', 'logger', ResetPasswordController]); + + function ResetPasswordController(userFactory, $location, logger) { + logger = logger.forSource(controllerId); + + var vm = this; + vm.email = $location.search().email; + vm.token = $location.search().token; + vm.resetPassword = resetPassword; + vm.resetPasswordRequest = resetPasswordRequest; + vm.viewMode = typeof $location.search().email === 'undefined' || typeof $location.search().token === 'undefined' ? + 'initial' : + 'received'; // initial | sent | received + + /*** Implementations ***/ + + function resetPassword() { + // var resetPasswordBindingModel = { Token: vm.token, NewPassword: vm.newPassword, ConfirmPassword: vm.confirmPassword }; + var resetPasswordBindingModel = vm; + userFactory.resetPassword(resetPasswordBindingModel) + .success(function () { + $location.url('/_system/account/login'); + logger.logSuccess('Your password has been reset!', null, true); + }); + } + + function resetPasswordRequest() { + var resetPasswordRequestBindingModel = vm; + userFactory.resetPasswordRequest(resetPasswordRequestBindingModel) + .success(function () { + vm.viewMode = 'sent'; + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'ResourcePoolListController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', + 'logger', + ResourcePoolListController]); + + function ResourcePoolListController(resourcePoolFactory, + logger) { + logger = logger.forSource(controllerId); + + var vm = this; + vm.resourcePoolSet = []; + + _init(); + + function _init() { + resourcePoolFactory.getResourcePoolSet(false) + .then(function (data) { + vm.resourcePoolSet = data; + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'ResourcePoolManageController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', + 'userFactory', + '$location', + '$routeParams', + '$rootScope', + '$uibModal', + 'Enums', + 'logger', + ResourcePoolManageController]); + + function ResourcePoolManageController(resourcePoolFactory, + userFactory, + $location, + $routeParams, + $rootScope, + $uibModal, + Enums, + logger) { + + // Logger + logger = logger.forSource(controllerId); + + var vm = this; + vm.addElement = addElement; + vm.addElementField = addElementField; + vm.addElementItem = addElementItem; + vm.cancelElement = cancelElement; + vm.cancelElementCell = cancelElementCell; + vm.cancelElementField = cancelElementField; + vm.cancelElementItem = cancelElementItem; + vm.cancelResourcePool = cancelResourcePool; + vm.editElement = editElement; + vm.editElementCell = editElementCell; + vm.editElementField = editElementField; + vm.editElementItem = editElementItem; + vm.element = null; + vm.elementMaster = null; + vm.elementCell = null; + vm.elementCellMaster = null; + vm.elementCellSet = elementCellSet; + vm.elementField = null; + vm.elementFieldMaster = null; + vm.elementFieldSet = elementFieldSet; + vm.elementFieldDataTypeFiltered = elementFieldDataTypeFiltered; + vm.elementItem = null; + vm.elementItemMaster = null; + vm.elementItemSet = elementItemSet; + vm.entityErrors = []; + vm.isElementEdit = false; + vm.isElementNew = true; + vm.isElementFieldEdit = false; + vm.isElementFieldNew = true; + vm.isElementItemEdit = false; + vm.isElementItemNew = true; + vm.isNew = $location.path() === '/_system/resourcePool/new'; + vm.isSaveEnabled = isSaveEnabled; + vm.isSaving = false; + vm.openCopyModal = openCopyModal; + vm.openRemoveResourcePoolModal = openRemoveResourcePoolModal; + vm.removeElement = removeElement; + vm.removeElementField = removeElementField; + vm.removeElementItem = removeElementItem; + vm.removeResourcePool = removeResourcePool; + vm.resourcePool = { ElementSet: [] }; + vm.resourcePoolId = $routeParams.resourcePoolId; + vm.saveResourcePool = saveResourcePool; + vm.saveElement = saveElement; + vm.saveElementCell = saveElementCell; + vm.saveElementField = saveElementField; + vm.saveElementItem = saveElementItem; + + // Enums + vm.ElementFieldDataType = Enums.ElementFieldDataType; + vm.ElementFieldIndexCalculationType = Enums.ElementFieldIndexCalculationType; + vm.ElementFieldIndexSortType = Enums.ElementFieldIndexSortType; + + _init(); + + /*** Implementations ***/ + + function _init() { + + if (vm.isNew) { + resourcePoolFactory.createResourcePoolBasic() + .then(function (resourcePool) { + vm.resourcePool = resourcePool; + vm.resourcePool.isEditing = true; + + // Title + // TODO viewTitle was also set in route.js? + $rootScope.viewTitle = vm.resourcePool.Name; + }); + } else { + resourcePoolFactory.getResourcePoolExpanded(vm.resourcePoolId) + .then(function (resourcePool) { + + // Not found, navigate to 404 + if (resourcePool === null) { + $location.url('/_system/content/404'); + return; + } + + vm.resourcePool = resourcePool; + vm.resourcePool.isEditing = true; + + // Title + // TODO viewTitle was also set in route.js? + $rootScope.viewTitle = vm.resourcePool.Name; + }); + } + } + + function addElement() { + vm.element = resourcePoolFactory.createElement({ + ResourcePool: vm.resourcePool, + Name: 'New element', + IsMainElement: false + }); + + vm.isElementEdit = true; + vm.isElementNew = true; + } + + function addElementField() { + + var element = vm.resourcePool.ElementSet[0]; + + // A temp fix for default value of 'SortOrder' + // Later handle 'SortOrder' by UI, not by asking + var sortOrder = element.ElementFieldSet.length + 1; + + vm.elementField = resourcePoolFactory.createElementField({ + Element: element, + Name: 'New field', + DataType: 1, + SortOrder: sortOrder + }); + + vm.isElementFieldEdit = true; + vm.isElementFieldNew = true; + } + + function addElementItem() { + vm.elementItem = { Element: vm.resourcePool.ElementSet[0], Name: 'New item' }; + vm.isElementItemEdit = true; + vm.isElementItemNew = true; + } + + function cancelElement() { + + // TODO Find a better way? + // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15 + if (vm.isElementNew) { + resourcePoolFactory.removeElement(vm.element); + } else { + vm.element.Name = vm.elementMaster.Name; + } + + vm.isElementEdit = false; + vm.element = null; + vm.elementMaster = null; + } + + function cancelElementCell() { + + // TODO Find a better way? + // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15 + vm.elementCell.SelectedElementItemId = vm.elementCellMaster.SelectedElementItemId; + vm.elementCell.UserElementCellSet[0].StringValue = vm.elementCellMaster.UserElementCellSet[0].StringValue; + vm.elementCell.UserElementCellSet[0].BooleanValue = vm.elementCellMaster.UserElementCellSet[0].BooleanValue; + vm.elementCell.UserElementCellSet[0].IntegerValue = vm.elementCellMaster.UserElementCellSet[0].IntegerValue; + vm.elementCell.UserElementCellSet[0].DecimalValue = vm.elementCellMaster.UserElementCellSet[0].DecimalValue; + vm.elementCell.UserElementCellSet[0].DateTimeValue = vm.elementCellMaster.UserElementCellSet[0].DateTimeValue; + + vm.isElementCellEdit = false; + vm.elementCell = null; + vm.elementCellMaster = null; + } + + function cancelElementField() { + + // TODO Find a better way? + // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15 + if (vm.isElementFieldNew) { + resourcePoolFactory.removeElementField(vm.elementField); + } else { + vm.elementField.Name = vm.elementFieldMaster.Name; + vm.elementField.DataType = vm.elementFieldMaster.DataType; + vm.elementField.SelectedElementId = vm.elementFieldMaster.SelectedElementId; + vm.elementField.UseFixedValue = vm.elementFieldMaster.UseFixedValue; + vm.elementField.IndexEnabled = vm.elementFieldMaster.IndexEnabled; + vm.elementField.IndexCalculationType = vm.elementFieldMaster.IndexCalculationType; + vm.elementField.IndexSortType = vm.elementFieldMaster.IndexSortType; + vm.elementField.SortOrder = vm.elementFieldMaster.SortOrder; + } + + vm.isElementFieldEdit = false; + vm.elementField = null; + vm.elementFieldMaster = null; + } + + function cancelElementItem() { + + // TODO Find a better way? + // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15 + if (!vm.isElementItemNew) { + vm.elementItem.Name = vm.elementItemMaster.Name; + } + + vm.isElementItemEdit = false; + vm.elementItem = null; + vm.elementItemMaster = null; + } + + function cancelResourcePool() { + + resourcePoolFactory.cancelResourcePool(vm.resourcePool); + + var locationPath = vm.isNew ? + '/_system/resourcePool' : + '/_system/resourcePool/' + vm.resourcePool.Id; + + $location.url(locationPath); + } + + function editElement(element) { + vm.elementMaster = angular.copy(element); + vm.element = element; + vm.isElementEdit = true; + vm.isElementNew = false; + } + + function editElementCell(elementCell) { + vm.elementCellMaster = angular.copy(elementCell); + vm.elementCell = elementCell; + vm.isElementCellEdit = true; + } + + function editElementField(elementField) { + vm.elementFieldMaster = angular.copy(elementField); + vm.elementField = elementField; + vm.isElementFieldEdit = true; + vm.isElementFieldNew = false; + } + + function editElementItem(elementItem) { + vm.elementItemMaster = angular.copy(elementItem); + vm.elementItem = elementItem; + vm.isElementItemEdit = true; + vm.isElementItemNew = false; + } + + function elementCellSet() { + + var elementItems = elementItemSet(); + + var list = []; + elementItems.forEach(function (elementItem) { + elementItem.ElementCellSet.forEach(function (elementCell) { + list.push(elementCell); + }); + }); + return list; + } + + function elementFieldSet() { + var list = []; + vm.resourcePool.ElementSet.forEach(function (element) { + element.ElementFieldSet.forEach(function (elementField) { + list.push(elementField); + }); + }); + return list; + } + + function elementFieldDataTypeFiltered() { + + var filtered = {}; + for (var key in vm.ElementFieldDataType) { + + // These types can be added only once at the moment + if (key === 'DirectIncome' || key === 'Multiplier') { + var exists = vm.elementField.Element.ElementFieldSet.some(fieldExists); + + if (!exists) { + filtered[key] = vm.ElementFieldDataType[key]; + } + } else if (key === 'Element') { // Element type can only be added if there are more than one element in the pool + if (vm.elementField.Element.ResourcePool.ElementSet.length > 1) { + filtered[key] = vm.ElementFieldDataType[key]; + } + } else { + filtered[key] = vm.ElementFieldDataType[key]; + } + } + + function fieldExists(field) { + return vm.ElementFieldDataType[key] === field.ElementFieldDataType; + } + + return filtered; + } + + function elementItemSet() { + var list = []; + vm.resourcePool.ElementSet.forEach(function (element) { + element.ElementItemSet.forEach(function (elementItem) { + list.push(elementItem); + }); + }); + return list; + } + + function isSaveEnabled() { + var value = !vm.isSaving && + typeof vm.resourcePoolForm !== 'undefined' && + vm.resourcePoolForm.$valid; + + return value; + } + + function openCopyModal() { + var modalInstance = $uibModal.open({ + templateUrl: 'copyResourcePoolModal.html', + controllerAs: 'vm', + controller: ['resourcePoolFactory', '$uibModalInstance', CopyResourcePoolModalController] + }); + + modalInstance.result.then(function (resourcePool) { + vm.resourcePool = resourcePool; + }); + } + + function openRemoveResourcePoolModal() { + var modalInstance = $uibModal.open({ + templateUrl: 'removeResourcePoolModal.html', + controller: ['$scope', '$uibModalInstance', RemoveResourcePoolModalController] + }); + + modalInstance.result.then(function () { + removeResourcePool(); + }); + } + + function removeElement(element) { + resourcePoolFactory.removeElement(element); + } + + function removeElementField(elementField) { + resourcePoolFactory.removeElementField(elementField); + } + + function removeElementItem(elementItem) { + resourcePoolFactory.removeElementItem(elementItem); + } + + function removeResourcePool() { + vm.isSaving = true; + + resourcePoolFactory.removeResourcePool(vm.resourcePool); + + userFactory.getCurrentUser() + .then(function (currentUser) { + if (currentUser.isAuthenticated()) { + resourcePoolFactory.saveChanges() + .then(function () { + $location.url('/_system/resourcePool'); + }) + .finally(function () { + vm.isSaving = false; + }); + } else { + $location.url('/_system/resourcePool'); + vm.isSaving = false; + } + }); + } + + function saveElement() { + vm.isElementEdit = false; + vm.element = null; + vm.elementMaster = null; + } + + function saveElementCell() { + vm.isElementCellEdit = false; + vm.elementCell = null; + vm.elementCellMaster = null; + } + + function saveElementField() { + + // Fixes + // a. UseFixedValue must be null for String & Element types + if (vm.elementField.DataType === vm.ElementFieldDataType.String || + vm.elementField.DataType === vm.ElementFieldDataType.Element) { + vm.elementField.UseFixedValue = null; + } + + // b. UseFixedValue must be 'false' for Multiplier type + if (vm.elementField.DataType === vm.ElementFieldDataType.Multiplier) { + vm.elementField.UseFixedValue = false; + } + + // c. DirectIncome cannot be Use Fixed Value false at the moment + if (vm.elementField.DataType === vm.ElementFieldDataType.DirectIncome) { + vm.elementField.UseFixedValue = true; + } + + vm.isElementFieldEdit = false; + vm.elementField = null; + vm.elementFieldMaster = null; + } + + function saveElementItem() { + + if (vm.isElementItemNew) { + vm.elementItem = resourcePoolFactory.createElementItem(vm.elementItem); + } + + vm.isElementItemEdit = false; + vm.elementItem = null; + vm.elementItemMaster = null; + } + + function saveResourcePool() { + + vm.isSaving = true; + + // TODO Try to move this to a better place? + vm.resourcePool.updateCache(); + + userFactory.getCurrentUser() + .then(function (currentUser) { + + /* Update isEditing state */ + // Resource pool + vm.resourcePool.isEditing = false; + + // User resource pools + vm.resourcePool.UserResourcePoolSet.forEach(function (userResourcePool) { + userResourcePool.isEditing = false; + }); + + // Elements + vm.resourcePool.ElementSet.forEach(function (element) { + element.isEditing = false; + + // Fields + element.ElementFieldSet.forEach(function (elementField) { + elementField.isEditing = false; + + // User element fields + elementField.UserElementFieldSet.forEach(function (userElementField) { + userElementField.isEditing = false; + }); + }); + + // Items + element.ElementItemSet.forEach(function (elementItem) { + elementItem.isEditing = false; + + // Cells + elementItem.ElementCellSet.forEach(function (elementCell) { + elementCell.isEditing = false; + + // User cells + elementCell.UserElementCellSet.forEach(function (userElementCell) { + userElementCell.isEditing = false; + }); + }); + }); + }); + /* Update isEditing state end */ + + if (currentUser.isAuthenticated()) { + resourcePoolFactory.saveChanges() + .then(function () { + $location.url('/_system/resourcePool/' + vm.resourcePool.Id); + }) + .finally(function () { + vm.isSaving = false; + }); + } else { + resourcePoolFactory.acceptChanges(vm.resourcePool); + vm.isSaving = false; + $location.url('/_system/resourcePool/' + vm.resourcePool.Id); + } + }); + } + } + + function RemoveResourcePoolModalController($scope, $uibModalInstance) { + $scope.cancel = function () { + $uibModalInstance.dismiss('cancel'); + }; + $scope.remove = function () { + $uibModalInstance.close(); + }; + } + + function CopyResourcePoolModalController(resourcePoolFactory, $uibModalInstance) { + + var vm = this; + vm.close = close; + vm.copy = copy; + vm.resourcePoolSet = []; + + _init(); + + function _init() { + resourcePoolFactory.getResourcePoolSet(false) + .then(function (data) { + vm.resourcePoolSet = data; + }); + } + + function close() { + $uibModalInstance.dismiss('cancel'); + } + + function copy(resourcePool) { + $uibModalInstance.close(resourcePool); + } + } + +})(); + +(function () { + 'use strict'; + + var controllerId = 'ResourcePoolViewController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', + '$location', + '$routeParams', + '$rootScope', + 'logger', + ResourcePoolViewController]); + + function ResourcePoolViewController(resourcePoolFactory, $location, $routeParams, $rootScope, logger) { + + // Logger + logger = logger.forSource(controllerId); + + var vm = this; + vm.editorConfig = getEditorConfig(); + + init(); + + function init() { + + // Title + if (!vm.editorConfig.isNew) { + resourcePoolFactory.getResourcePool(vm.editorConfig.resourcePoolId) + .then(function (resourcePool) { + + // Not found, navigate to 404 + if (resourcePool === null) { + $location.url('/_system/content/404'); + return; + } + + // TODO viewTitle was also set in route.js? + $rootScope.viewTitle = resourcePool.name(); + }); + } + } + + function getEditorConfig() { + + var action = $location.path().substring($location.path().lastIndexOf('/') + 1); + var isNew = action === 'new'; + var isEdit = action === 'edit'; + var resourcePoolId = $routeParams.resourcePoolId; + + var config = { + isNew: isNew, + isEdit: isEdit, + resourcePoolId: isNew ? null : resourcePoolId + }; + + return config; + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'AllInOneController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', '$scope', 'logger', AllInOneController]); + + function AllInOneController(resourcePoolFactory, $scope, logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + vm.allInOneConfig = { resourcePoolId: 7 }; + + // Event listeners + $scope.$on('resourcePoolEditor_elementCellNumericValueIncreased', processNewInteraction); + $scope.$on('resourcePoolEditor_elementCellNumericValueDecreased', processNewInteraction); + $scope.$on('resourcePoolEditor_elementCellNumericValueReset', processNewInteraction); + + _init(); + + function _init() { + processExistingInteraction(); + } + + // Processes whether the current user had already interacted with this example + function processExistingInteraction() { + // Priority & Knowledge Index examples copy their ratings to this one + // However if the user starts directly playing .. + resourcePoolFactory.getResourcePoolExpanded(vm.allInOneConfig.resourcePoolId) + .then(function (resourcePool) { + // Elements + for (var elementIndex = 0; elementIndex < resourcePool.ElementSet.length; elementIndex++) { + var element = resourcePool.ElementSet[elementIndex]; + // Element fields + for (var elementFieldIndex = 0; elementFieldIndex < element.ElementFieldSet.length; elementFieldIndex++) { + var elementField = element.ElementFieldSet[elementFieldIndex]; + // Element cells + for (var elementCellIndex = 0; elementCellIndex < elementField.ElementCellSet.length; elementCellIndex++) { + var elementCell = elementField.ElementCellSet[elementCellIndex]; + + if (elementCell.currentUserCell()) { + resourcePool.userInteracted = true; + return; + } + } + } + } + }); + } + + // Processes whether the user is currently interacting with this example + function processNewInteraction(event, cell) { + if (cell.ElementField.Element.ResourcePoolId === vm.allInOneConfig.resourcePoolId) { + cell.ElementField.Element.ResourcePool.userInteracted = true; + return; + } + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'BasicsController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', 'userFactory', 'dataContext', '$scope', 'logger', BasicsController]); + + function BasicsController(resourcePoolFactory, userFactory, dataContext, $scope, logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + vm.existingModelConfig = {}; + vm.newModelConfig = {}; + + // Listen resource pool updated event + $scope.$on('resourcePoolEditor_elementMultiplierIncreased', updateOppositeResourcePool); + $scope.$on('resourcePoolEditor_elementMultiplierDecreased', updateOppositeResourcePool); + $scope.$on('resourcePoolEditor_elementMultiplierReset', updateOppositeResourcePool); + + _init(); + + /*** Implementations ***/ + + function _init() { + + var existingModelSampleId = -102; + var newModelSampleId = -103; + + resourcePoolFactory.getResourcePoolExpanded(existingModelSampleId) + .then(function (resourcePool) { + if (resourcePool === null) { + getBasicsSample() + .then(function (resourcePool) { + resourcePool.Id = existingModelSampleId; + resourcePool.Name = 'Basics - Existing Model'; + resourcePool.UserResourcePoolSet[0].entityAspect.setDeleted(); // Remove resource pool rate + resourcePool._init(true); + + vm.existingModelConfig.resourcePoolId = resourcePool.Id; + }); + } else { + vm.existingModelConfig.resourcePoolId = resourcePool.Id; + } + }); + + resourcePoolFactory.getResourcePoolExpanded(newModelSampleId) + .then(function (resourcePool) { + if (resourcePool === null) { + getBasicsSample() + .then(function (resourcePool) { + resourcePool.Id = newModelSampleId; + resourcePool.Name = 'Basics - New Model'; + + // Employee Satisfaction field (index) + var employeeSatisfactionField = resourcePoolFactory.createElementField({ + Element: resourcePool.mainElement(), + Name: 'Employee Satisfaction', + DataType: 4, + UseFixedValue: false, + IndexEnabled: true, + IndexCalculationType: 1, + IndexSortType: 1, + SortOrder: 2 + }); + + // A fake user & ratings + // TODO Use factories instead of dataContext? + var fakeUser = dataContext.createEntity('User', {}); + + employeeSatisfactionField.ElementCellSet.forEach(function (elementCell) { + var userElementCell = { + User: fakeUser, + ElementCell: elementCell, + DecimalValue: Math.floor((Math.random() * 100) + 1) + }; + + dataContext.createEntity('UserElementCell', userElementCell); + }); + + resourcePool._init(true); + + vm.newModelConfig.resourcePoolId = resourcePool.Id; + }); + } else { + vm.newModelConfig.resourcePoolId = resourcePool.Id; + } + }); + } + + function getBasicsSample() { + return resourcePoolFactory.createResourcePoolDirectIncomeAndMultiplier() + .then(function (resourcePool) { + resourcePool.InitialValue = 0; + resourcePool.isTemp = true; + + var mainElement = resourcePool.mainElement(); + mainElement.Name = 'Organization'; + + mainElement.ElementItemSet[0].Name = 'Alpha'; + mainElement.ElementItemSet[1].Name = 'Beta'; + resourcePoolFactory.createElementItem({ + Element: mainElement, + Name: 'Charlie' + }); + resourcePoolFactory.createElementItem({ + Element: mainElement, + Name: 'Delta' + }); + + return resourcePool; + }); + } + + function updateOppositeResourcePool(event, element) { + + var oppositeResourcePoolId = 0; + + if (element.ResourcePool.Id === vm.existingModelConfig.resourcePoolId) { + oppositeResourcePoolId = vm.newModelConfig.resourcePoolId; + } else if (element.ResourcePool.Id === vm.newModelConfig.resourcePoolId) { + oppositeResourcePoolId = vm.existingModelConfig.resourcePoolId; + } + + // Call the service to increase the multiplier + if (oppositeResourcePoolId !== 0) { + resourcePoolFactory.getResourcePoolExpanded(oppositeResourcePoolId) + .then(function (resourcePool) { + switch (event.name) { + case 'resourcePoolEditor_elementMultiplierIncreased': { + userFactory.updateElementMultiplier(resourcePool.mainElement(), 'increase'); + break; + } + case 'resourcePoolEditor_elementMultiplierDecreased': { + userFactory.updateElementMultiplier(resourcePool.mainElement(), 'decrease'); + break; + } + case 'resourcePoolEditor_elementMultiplierReset': { + userFactory.updateElementMultiplier(resourcePool.mainElement(), 'reset'); + break; + } + } + }); + } + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'DefaultController'; + angular.module('main') + .controller(controllerId, ['applicationFactory', 'userFactory', '$scope', '$location', 'disqusShortname', 'logger', DefaultController]); + + function DefaultController(applicationFactory, userFactory, $scope, $location, disqusShortname, logger) { + + // Logger + logger = logger.forSource(controllerId); + + // Local variables + var anonymousUserWarning = null; + + // View model + var vm = this; + vm.applicationInfo = null; + vm.currentUser = { Email: '', isAuthenticated: function () { return false; }, hasPassword: function () { return false; } }; + vm.currentDate = new Date(); + vm.displayBankTransfer = false; + vm.displayFooterIcons = false; + vm.disqusConfig = { + disqus_shortname: disqusShortname, + disqus_identifier: '', + disqus_url: '' + }; + vm.logout = logout; + vm.toggleBankTransfer = toggleBankTransfer; + + // Events + $scope.$on('$routeChangeSuccess', routeChangeSuccess); + $scope.$on('anonymousUserInteracted', anonymousUserInteracted); // Anonymous user warning + $scope.$on('userFactory_currentUserChanged', currentUserChanged); + + _init(); + + /*** Implementations ***/ + + function _init() { + getApplicationInfo(); + } + + function anonymousUserInteracted() { + if (anonymousUserWarning === null) { + var warningText = 'To prevent losing your changes, you can register for free or if you have an existing account, please login first.'; + var warningTitle = 'Save your changes?'; + var loggerOptions = { extendedTimeOut: 0, timeOut: 0 }; + anonymousUserWarning = logger.logWarning(warningText, null, true, warningTitle, loggerOptions); + } + } + + function currentUserChanged(event, newUser) { + vm.currentUser = newUser; + } + + function getApplicationInfo() { + applicationFactory.getApplicationInfo() + .then(function (applicationInfo) { + vm.applicationInfo = applicationInfo; + vm.applicationInfo.CurrentVersionText = vm.applicationInfo.CurrentVersion + ' - Alpha ~ Beta'; + }); + } + + function logout() { + userFactory.logout() + .then(function () { + $location.url('/'); + }); + } + + function routeChangeSuccess(event, current, previous) { + + // Footer icons + vm.displayFooterIcons = $location.path() === '/'; + + // Load related disqus + if (typeof current.enableDisqus !== 'undefined' && current.enableDisqus) { + vm.disqusConfig.disqus_identifier = disqusShortname + $location.path().replace(/\//g, '_'); + vm.disqusConfig.disqus_url = $location.absUrl().substring(0, $location.absUrl().length - $location.url().length + $location.path().length); + } else { + vm.disqusConfig.disqus_identifier = ''; + } + + // Remove anonymousUserWarning toastr in register & login pages, if there is + if (($location.path() === '/_system/account/register' || + $location.path() === '/_system/account/login') && + anonymousUserWarning !== null) { + anonymousUserWarning.remove(); + } + } + + function toggleBankTransfer() { + vm.displayBankTransfer = !vm.displayBankTransfer; + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'IntroductionController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', '$timeout', 'logger', IntroductionController]); + + function IntroductionController(resourcePoolFactory, userFactory, $scope, $timeout, logger) { + + // Logger + logger = logger.forSource(controllerId); + + var vm = this; + vm.upoConfig = {}; + + _init(); + + /*** Implementations ***/ + + function _init() { + + var upoId = -101; + + resourcePoolFactory.getResourcePoolExpanded(upoId) + .then(function (resourcePool) { + if (resourcePool === null) { + + resourcePoolFactory.createResourcePoolDirectIncomeAndMultiplier() + .then(function (resourcePool) { + resourcePool.Id = upoId; + resourcePool.Name = 'Unidentified Profiting Object (UPO)'; + resourcePool.InitialValue = 0; + resourcePool.isTemp = true; + resourcePool.displayMultiplierFunctions = false; + resourcePool.UserResourcePoolSet[0].entityAspect.setDeleted(); // Remove resource pool rate + + var mainElement = resourcePool.mainElement(); + mainElement.Name = 'Organization'; + + mainElement.ElementItemSet[0].Name = 'UPO'; + resourcePoolFactory.removeElementItem(mainElement.ElementItemSet[1]); + + resourcePool._init(true); + + initResourcePool(resourcePool); + }); + } else { + initResourcePool(resourcePool); + } + + function initResourcePool(resourcePool) { + vm.upoConfig.resourcePoolId = resourcePool.Id; + + var increaseMultiplierTimeout = $timeout(increaseMultiplier, 5000); + + function increaseMultiplier() { + + // Call the service to increase the multiplier + resourcePoolFactory.getResourcePoolExpanded(vm.upoConfig.resourcePoolId) + .then(function (resourcePool) { + + if (resourcePool === null) { + return; + } + + resourcePool.ElementSet.forEach(function (element) { + userFactory.updateElementMultiplier(element, 'increase'); + }); + }); + + // Then increase recursively + increaseMultiplierTimeout = $timeout(increaseMultiplier, 2500); + } + + // When the DOM element is removed from the page, + // AngularJS will trigger the $destroy event on + // the scope. This gives us a chance to cancel any + // pending timer that we may have. + $scope.$on("$destroy", function (event) { + $timeout.cancel(increaseMultiplierTimeout); + }); + } + }); + } + + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'KnowledgeIndexController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', '$timeout', 'logger', KnowledgeIndexController]); + + function KnowledgeIndexController(resourcePoolFactory, userFactory, $scope, $timeout, logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + vm.oldModelChartConfig = { + title: { + text: '' + }, + options: { + chart: { + type: 'column', + height: 358 + }, + plotOptions: { + column: { + allowPointSelect: true, + pointWidth: 15 + } + }, + xAxis: { categories: ['Knowledge'] }, + yAxis: { + title: { + text: 'Development process' + }, + allowDecimals: false, + min: 0 + } + }, + size: {}, + series: [ + { name: "My Precious Jewelry", data: [0] }, + { name: 'Death Star Architecture', data: [0] }, + { name: "Christina's Secret", data: [0] }, + { name: 'Nuka Cola Company', data: [0] } + ] + }; + vm.newModelChartConfig = { + title: { + text: '' + }, + options: { + chart: { + type: 'column', + height: 300 + }, + plotOptions: { + column: { + allowPointSelect: true, + pointWidth: 15 + } + }, + xAxis: { categories: ['Knowledge'] }, + yAxis: { + title: { + text: 'Development process' + }, + allowDecimals: false, + min: 0 + } + }, + size: {}, + series: [ + { name: 'Global Knowledge Database', data: [0] } + ] + }; + vm.knowledgeIndexConfig = { resourcePoolId: 3 }; + + // Event listeners + $scope.$on('resourcePoolEditor_elementCellNumericValueIncreased', updateAllInOne); + $scope.$on('resourcePoolEditor_elementCellNumericValueDecreased', updateAllInOne); + $scope.$on('resourcePoolEditor_elementCellNumericValueReset', updateAllInOne); + + _init(); + + function _init() { + var timeout = $timeout(refreshPage, 10000); + + function refreshPage() { + var organizationIndex = Math.floor(Math.random() * 4); + vm.oldModelChartConfig.series[organizationIndex].data[0] += 1; + vm.newModelChartConfig.series[0].data[0] += 1; + + timeout = $timeout(refreshPage, 1000); + } + + // When the DOM element is removed from the page, + // AngularJS will trigger the $destroy event on + // the scope. This gives us a chance to cancel any + // pending timer that we may have. + $scope.$on("$destroy", function (event) { + $timeout.cancel(timeout); + }); + } + + // Sync this example's values with 'All in One' + function updateAllInOne(event, cell) { + + var allInOneId = 7; + + if (cell.ElementField.Element.ResourcePoolId !== vm.knowledgeIndexConfig.resourcePoolId) { + return; + } + + resourcePoolFactory.getResourcePoolExpanded(allInOneId) + .then(function (resourcePool) { + + // If the current user already interacted with 'All in One', stop copying ratings + if (typeof resourcePool.userInteracted !== 'undefined' && resourcePool.userInteracted) { + return; + } + + // Elements + for (var elementIndex = 0; elementIndex < resourcePool.ElementSet.length; elementIndex++) { + var element = resourcePool.ElementSet[elementIndex]; + if (element.Name === cell.ElementField.Element.Name) { + // Element fields + for (var elementFieldIndex = 0; elementFieldIndex < element.ElementFieldSet.length; elementFieldIndex++) { + var elementField = element.ElementFieldSet[elementFieldIndex]; + if (elementField.Name === cell.ElementField.Name) { + // Element cells + for (var elementCellIndex = 0; elementCellIndex < elementField.ElementCellSet.length; elementCellIndex++) { + var elementCell = elementField.ElementCellSet[elementCellIndex]; + if (elementCell.ElementItem.Name === cell.ElementItem.Name) { + switch (event.name) { + case 'resourcePoolEditor_elementCellNumericValueIncreased': { + userFactory.updateElementCellNumericValue(elementCell, 'increase'); + break; + } + case 'resourcePoolEditor_elementCellNumericValueDecreased': { + userFactory.updateElementCellNumericValue(elementCell, 'decrease'); + break; + } + case 'resourcePoolEditor_elementCellNumericValueReset': { + userFactory.updateElementCellNumericValue(elementCell, 'reset'); + break; + } + } + + // Save changes + resourcePoolFactory.saveChanges(1500); + break; + } + } + } + } + } + } + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'PriorityIndexController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', 'logger', PriorityIndexController]); + + function PriorityIndexController(resourcePoolFactory, userFactory, $scope, logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + vm.priorityIndexConfig = { resourcePoolId: 2 }; + + // Event listeners + $scope.$on('resourcePoolEditor_elementCellNumericValueIncreased', updateAllInOne); + $scope.$on('resourcePoolEditor_elementCellNumericValueDecreased', updateAllInOne); + $scope.$on('resourcePoolEditor_elementCellNumericValueReset', updateAllInOne); + + // Sync this example's values with 'All in One' + function updateAllInOne(event, cell) { + + var allInOneId = 7; + + if (cell.ElementField.Element.ResourcePoolId !== vm.priorityIndexConfig.resourcePoolId) { + return; + } + + resourcePoolFactory.getResourcePoolExpanded(allInOneId) + .then(function (resourcePool) { + + // If the current user already interacted with 'All in One', stop copying ratings + if (typeof resourcePool.userInteracted !== 'undefined' && resourcePool.userInteracted) { + return; + } + + // Elements + for (var elementIndex = 0; elementIndex < resourcePool.ElementSet.length; elementIndex++) { + var element = resourcePool.ElementSet[elementIndex]; + if (element.Name === cell.ElementField.Element.Name) { + // Element fields + for (var elementFieldIndex = 0; elementFieldIndex < element.ElementFieldSet.length; elementFieldIndex++) { + var elementField = element.ElementFieldSet[elementFieldIndex]; + if (elementField.Name === cell.ElementField.Name) { + // Element cells + for (var elementCellIndex = 0; elementCellIndex < elementField.ElementCellSet.length; elementCellIndex++) { + var elementCell = elementField.ElementCellSet[elementCellIndex]; + if (elementCell.ElementItem.Name === cell.ElementItem.Name) { + switch (event.name) { + case 'resourcePoolEditor_elementCellNumericValueIncreased': { + userFactory.updateElementCellNumericValue(elementCell, 'increase'); + break; + } + case 'resourcePoolEditor_elementCellNumericValueDecreased': { + userFactory.updateElementCellNumericValue(elementCell, 'decrease'); + break; + } + case 'resourcePoolEditor_elementCellNumericValueReset': { + userFactory.updateElementCellNumericValue(elementCell, 'reset'); + break; + } + } + + // Save changes + resourcePoolFactory.saveChanges(1500); + break; + } + } + } + } + } + } + }); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'TotalCostIndexController'; + angular.module('main') + .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', 'logger', TotalCostIndexController]); + + function TotalCostIndexController(resourcePoolFactory, userFactory, $scope, logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + vm.existingModelConfig = { resourcePoolId: 5 }; + vm.newModelConfig = { resourcePoolId: 6 }; + + // Listen resource pool updated event + $scope.$on('resourcePoolEditor_elementMultiplierIncreased', updateOppositeResourcePool); + $scope.$on('resourcePoolEditor_elementMultiplierDecreased', updateOppositeResourcePool); + $scope.$on('resourcePoolEditor_elementMultiplierReset', updateOppositeResourcePool); + + function updateOppositeResourcePool(event, element) { + + var oppositeResourcePoolId = 0; + + if (element.ResourcePool.Id === vm.existingModelConfig.resourcePoolId) { + oppositeResourcePoolId = vm.newModelConfig.resourcePoolId; + } else if (element.ResourcePool.Id === vm.newModelConfig.resourcePoolId) { + oppositeResourcePoolId = vm.existingModelConfig.resourcePoolId; + } + + // Call the service to increase the multiplier + if (oppositeResourcePoolId > 0) { + resourcePoolFactory.getResourcePoolExpanded(oppositeResourcePoolId) + .then(function (resourcePool) { + + switch (event.name) { + case 'resourcePoolEditor_elementMultiplierIncreased': { + userFactory.updateElementMultiplier(resourcePool.mainElement(), 'increase'); + break; + } + case 'resourcePoolEditor_elementMultiplierDecreased': { + userFactory.updateElementMultiplier(resourcePool.mainElement(), 'decrease'); + break; + } + case 'resourcePoolEditor_elementMultiplierReset': { + userFactory.updateElementMultiplier(resourcePool.mainElement(), 'reset'); + break; + } + } + + resourcePoolFactory.saveChanges(1500); + }); + } + } + } +})(); + +(function () { + 'use strict'; + + var directiveId = 'resourcePoolEditor'; + + angular.module('main') + .directive(directiveId, ['resourcePoolFactory', + 'userFactory', + 'Enums', + '$location', + '$rootScope', + 'logger', + resourcePoolEditor]); + + function resourcePoolEditor(resourcePoolFactory, + userFactory, + Enums, + $location, + $rootScope, + logger) { + + // Logger + logger = logger.forSource(directiveId); + + function link(scope, elm, attrs) { + + // Local variables + scope.currentUser = null; + scope.displayIndexDetails = false; + scope.editResourcePool = editResourcePool; + scope.errorMessage = ''; + scope.isSaving = false; + scope.resourcePool = { Name: 'Loading...' }; + scope.resourcePoolId = null; + + // Functions + scope.changeSelectedElement = changeSelectedElement; + scope.decreaseElementCellNumericValue = decreaseElementCellNumericValue; + scope.decreaseElementMultiplier = decreaseElementMultiplier; + scope.decreaseElementCellMultiplier = decreaseElementCellMultiplier; + scope.decreaseIndexRating = decreaseIndexRating; + scope.decreaseResourcePoolRate = decreaseResourcePoolRate; + scope.increaseElementCellNumericValue = increaseElementCellNumericValue; + scope.increaseElementMultiplier = increaseElementMultiplier; + scope.increaseElementCellMultiplier = increaseElementCellMultiplier; + scope.increaseIndexRating = increaseIndexRating; + scope.increaseResourcePoolRate = increaseResourcePoolRate; + scope.resetElementCellNumericValue = resetElementCellNumericValue; + scope.resetElementMultiplier = resetElementMultiplier; + scope.resetElementCellMultiplier = resetElementCellMultiplier; + scope.resetIndexRating = resetIndexRating; + scope.resetResourcePoolRate = resetResourcePoolRate; + scope.toggleIndexDetails = toggleIndexDetails; + + // Event handlers + scope.$watch('config', configChanged, true); + scope.$on('saveChangesStart', saveChangesStart); + scope.$on('saveChangesCompleted', saveChangesCompleted); + scope.$on('userFactory_currentUserChanged', currentUserChanged); + + /*** Implementations ***/ + + function changeSelectedElement(element) { + scope.resourcePool.selectedElement(element); + loadChartData(); + } + + function configChanged() { + var resourcePoolId = typeof scope.config.resourcePoolId === 'undefined' ? null : Number(scope.config.resourcePoolId); + userFactory.getCurrentUser() + .then(function (currentUser) { + initialize(currentUser, resourcePoolId); + }); + } + + function decreaseElementCellNumericValue(cell) { + userFactory.updateElementCellNumericValue(cell, 'decrease'); + $rootScope.$broadcast('resourcePoolEditor_elementCellNumericValueDecreased', cell); + saveChanges(); + } + + function decreaseElementMultiplier(element) { + userFactory.updateElementMultiplier(element, 'decrease'); + $rootScope.$broadcast('resourcePoolEditor_elementMultiplierDecreased', element); + saveChanges(); + } + + function decreaseElementCellMultiplier(elementCell) { + userFactory.updateElementCellMultiplier(elementCell, 'decrease'); + $rootScope.$broadcast('resourcePoolEditor_elementCellMultiplierDecreased', element); + saveChanges(); + } + + function decreaseIndexRating(field) { + userFactory.updateElementFieldIndexRating(field, 'decrease'); + saveChanges(); + } + + function decreaseResourcePoolRate() { + userFactory.updateResourcePoolRate(scope.resourcePool, 'decrease'); + saveChanges(); + } + + function editResourcePool() { + // TODO Instead of having fixed url here, broadcast an 'edit request'? + $location.url('/_system/resourcePool/' + scope.resourcePoolId + '/edit'); + } + + function increaseElementCellNumericValue(cell) { + $rootScope.$broadcast('resourcePoolEditor_elementCellNumericValueIncreased', cell); + userFactory.updateElementCellNumericValue(cell, 'increase'); + saveChanges(); + } + + function increaseElementMultiplier(element) { + userFactory.updateElementMultiplier(element, 'increase'); + $rootScope.$broadcast('resourcePoolEditor_elementMultiplierIncreased', element); + saveChanges(); + } + + function increaseElementCellMultiplier(elementCell) { + userFactory.updateElementCellMultiplier(elementCell, 'increase'); + $rootScope.$broadcast('resourcePoolEditor_elementCellMultiplierIncreased', element); + saveChanges(); + } + + function increaseIndexRating(field) { + userFactory.updateElementFieldIndexRating(field, 'increase'); + saveChanges(); + } + + function increaseResourcePoolRate() { + userFactory.updateResourcePoolRate(scope.resourcePool, 'increase'); + saveChanges(); + } + + function initialize(user, resourcePoolId) { + + if (scope.currentUser !== user || scope.resourcePoolId !== resourcePoolId) { + scope.currentUser = user; + scope.resourcePoolId = resourcePoolId; + + // Clear previous error messages + scope.errorMessage = ''; + + scope.chartConfig = { + credits: { + enabled: false + }, + loading: true, + options: { + plotOptions: { + column: { + allowPointSelect: true, + pointWidth: 15 + }, + pie: { + allowPointSelect: true, + cursor: 'pointer', + dataLabels: { + enabled: false + }, + showInLegend: true + } + }, + tooltip: { + headerFormat: '' + }, + xAxis: { categories: [''] }, + yAxis: { + allowDecimals: false, + min: 0 + } + }, + size: {}, + title: { text: '' } + }; + + // Validate + if (scope.resourcePoolId === null) { + scope.errorMessage = 'CMRP Id cannot be null'; + scope.chartConfig.loading = false; + return; + } + + // Get resource pool + resourcePoolFactory.getResourcePoolExpanded(scope.resourcePoolId) + .then(function (resourcePool) { + + if (resourcePool === null) { + scope.errorMessage = 'Invalid CMRP Id'; + return; + } + + // It returns an array, set the first item in the list + scope.resourcePool = resourcePool; + + if (scope.resourcePool.selectedElement() !== null) { + loadChartData(); + } + }) + .catch(function () { + // TODO scope.errorMessage ? + }) + .finally(function () { + scope.chartConfig.loading = false; + }); + } + } + + function loadChartData() { + + // Current element + var element = scope.resourcePool.selectedElement(); + var chartData = null; + + if (element === null) { + return; + } + + // Item length check + if (element.ElementItemSet.length > 20) { + return; + } + + scope.chartConfig.title = { text: element.Name }; + scope.chartConfig.series = []; + + if (scope.displayIndexDetails) { + + // Pie type + scope.chartConfig.title = { text: 'Indexes' }; + scope.chartConfig.options.chart = { type: 'pie' }; + scope.chartConfig.options.yAxis.title = { text: '' }; + + chartData = []; + element.elementFieldIndexSet().forEach(function (elementFieldIndex) { + var chartItem = new ElementFieldIndexChartItem(elementFieldIndex); + chartData.push(chartItem); + }); + scope.chartConfig.series = [{ data: chartData }]; + + } else { + + scope.chartConfig.title = { text: element.Name }; + + // TODO Check this rule? + if (element === element.ResourcePool.mainElement() && (element.totalIncome() > 0 || element.directIncomeField() !== null)) { + + // Column type + scope.chartConfig.options.chart = { type: 'column' }; + scope.chartConfig.options.yAxis.title = { text: 'Total Income' }; + + element.ElementItemSet.forEach(function (elementItem) { + var chartItem = new ColumnChartItem(elementItem); + scope.chartConfig.series.push(chartItem); + }); + } else { + + // Pie type + scope.chartConfig.options.chart = { type: 'pie' }; + scope.chartConfig.options.yAxis.title = { text: '' }; + + chartData = []; + element.ElementItemSet.forEach(function (elementItem) { + elementItem.ElementCellSet.forEach(function (elementCell) { + if (elementCell.ElementField.IndexEnabled) { + var chartItem = new PieChartItem(elementCell); + chartData.push(chartItem); + } + }); + }); + scope.chartConfig.series = [{ data: chartData }]; + } + } + } + + function resetElementCellNumericValue(cell) { + userFactory.updateElementCellNumericValue(cell, 'reset'); + $rootScope.$broadcast('resourcePoolEditor_elementCellNumericValueReset', element); + saveChanges(); + } + + function resetElementMultiplier(element) { + userFactory.updateElementMultiplier(element, 'reset'); + $rootScope.$broadcast('resourcePoolEditor_elementMultiplierReset', element); + saveChanges(); + } + + function resetElementCellMultiplier(elementCell) { + userFactory.updateElementCellMultiplier(elementCell, 'reset'); + $rootScope.$broadcast('resourcePoolEditor_elementCellMultiplierReset', element); + saveChanges(); + } + + function resetIndexRating(field) { + userFactory.updateElementFieldIndexRating(field, 'reset'); + saveChanges(); + } + + function resetResourcePoolRate() { + userFactory.updateResourcePoolRate(scope.resourcePool, 'reset'); + saveChanges(); + } + + function saveChanges() { + resourcePoolFactory.saveChanges(1500) + .catch(function (error) { + // Conflict (Concurrency exception) + if (typeof error.status !== 'undefined' && error.status === '409') { + // TODO Try to recover! + } else if (typeof error.entityErrors !== 'undefined') { + // config.entityErrors = error.entityErrors; + } + }); + } + + function saveChangesStart() { + scope.isSaving = true; + } + + function saveChangesCompleted() { + scope.isSaving = false; + } + + // Index Details + function toggleIndexDetails() { + scope.displayIndexDetails = !scope.displayIndexDetails; + loadChartData(); + } + + function currentUserChanged(event, newUser) { + initialize(newUser, scope.resourcePoolId); + } + + /* Chart objects */ + + // TODO Store these in a better place? + // TODO Also test these better, by comparing it with resourcePool.selectedElement() property! + function ColumnChartItem(elementItem) { + var self = this; + + Object.defineProperty(self, "name", { + enumerable: true, + configurable: true, + get: function () { + return elementItem.Name; + } + }); + + Object.defineProperty(self, "data", { + enumerable: true, + configurable: true, + get: function () { + return [elementItem.totalIncome()]; + } + }); + } + + function ElementFieldIndexChartItem(elementFieldIndex) { + var self = this; + + Object.defineProperty(self, "name", { + enumerable: true, + configurable: true, + get: function () { return elementFieldIndex.Name; } + }); + + Object.defineProperty(self, "y", { + enumerable: true, + configurable: true, + get: function () { + var indexRating = elementFieldIndex.indexRating(); + // TODO Make rounding better, instead of toFixed + number + return Number(indexRating.toFixed(2)); + } + }); + } + + function PieChartItem(elementCell) { + var self = this; + + Object.defineProperty(self, "name", { + enumerable: true, + configurable: true, + get: function () { + return elementCell.ElementItem.Name; + } + }); + + Object.defineProperty(self, "y", { + enumerable: true, + configurable: true, + get: function () { + var numericValue = elementCell.numericValue(); + // TODO Make rounding better, instead of toFixed + number + return Number(numericValue.toFixed(2)); + } + }); + } + } + + return { + restrict: 'E', + templateUrl: '/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.49.0', + scope: { + config: '=' + }, + link: link + }; + } +})(); + +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +(function () { + 'use strict'; + + var factoryId = 'resourcePoolFactory'; + angular.module('main') + .factory(factoryId, ['dataContext', '$rootScope', 'logger', resourcePoolFactory]); + + function resourcePoolFactory(dataContext, $rootScope, logger) { + + // Logger + logger = logger.forSource(factoryId); + + // To determine whether the data will be fetched from server or local + var minimumDate = new Date(0); + var fetchedOn = minimumDate; + + // Factory methods (alphabetically) + var factory = { + createResourcePool: createResourcePool, + deleteResourcePool: deleteResourcePool, + getChanges: getChanges, + getChangesCount: getChangesCount, + getResourcePoolSet: getResourcePoolSet, + getResourcePool: getResourcePool, + hasChanges: hasChanges, + rejectChanges: rejectChanges, + saveChanges: saveChanges, + saveChangesAlt: saveChangesAlt + }; + + // User logged out + $rootScope.$on('userFactory_currentUserChanged', function () { + fetchedOn = minimumDate; + }); + + return factory; + + /*** Implementations ***/ + + function createResourcePool(resourcePool) { + return dataContext.createEntity('ResourcePool', resourcePool); + } + + function deleteResourcePool(resourcePool) { + resourcePool.entityAspect.setDeleted(); + } + + function getChanges() { + return dataContext.getChanges(); + } + + function getChangesCount() { + return dataContext.getChangesCount(); + } + + function getResourcePoolSet(forceRefresh) { + var count; + if (forceRefresh) { + if (dataContext.hasChanges()) { + count = dataContext.getChangesCount(); + dataContext.rejectChanges(); // undo all unsaved changes! + logger.logWarning('Discarded ' + count + ' pending change(s)', null); + } + } + + var query = breeze.EntityQuery + .from('ResourcePool') + .expand(['User']) + ; + + // Fetch the data from server, in case if it's not fetched earlier or forced + var fetchFromServer = fetchedOn === minimumDate || forceRefresh; + + // Prepare the query + if (fetchFromServer) { // From remote + query = query.using(breeze.FetchStrategy.FromServer); + fetchedOn = new Date(); + } + else { // From local + query = query.using(breeze.FetchStrategy.FromLocalCache); + } + + return dataContext.executeQuery(query) + .then(success).catch(failed); + + function success(response) { + count = response.results.length; + //logger.logSuccess('Got ' + count + ' resourcePool(s)', response); + + // Filter out 'temp' resource pools + var data = []; + response.results.forEach(function (item) { + if (!item.isTemp) { + data.push(item); + } + }); + + return data; + } + + function failed(error) { + var message = error.message || 'ResourcePool query failed'; + logger.logError(message, error, true); + } + } + + function getResourcePool(resourcePoolId, forceRefresh) { + return dataContext.fetchEntityByKey('ResourcePool', resourcePoolId, !forceRefresh) + .then(success).catch(failed); + + function success(result) { + return result.entity; + } + + function failed(error) { + var message = error.message || 'getResourcePool query failed'; + logger.logError(message, error, true); + } + } + + function hasChanges() { + return dataContext.hasChanges(); + } + + function rejectChanges() { + dataContext.rejectChanges(); + } + + function saveChanges(delay) { + return dataContext.saveChanges(delay); + } + + function saveChangesAlt(resourcePool, delay) { + return dataContext.saveChangesAlt(resourcePool.getEntities(), delay); + } + } +})(); + +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +(function () { + 'use strict'; + + var factoryId = 'userFactory'; + angular.module('main') + .factory(factoryId, ['dataContext', '$rootScope', 'logger', userFactory]); + + function userFactory(dataContext, $rootScope, logger) { + + // Logger + logger = logger.forSource(factoryId); + + // To determine whether the data will be fetched from server or local + var minimumDate = new Date(0); + var fetchedOn = minimumDate; + + // Factory methods (alphabetically) + var factory = { + createUser: createUser, + deleteUser: deleteUser, + getChanges: getChanges, + getChangesCount: getChangesCount, + getUserSet: getUserSet, + getUser: getUser, + hasChanges: hasChanges, + rejectChanges: rejectChanges, + saveChanges: saveChanges, + saveChangesAlt: saveChangesAlt + }; + + // User logged out + $rootScope.$on('userFactory_currentUserChanged', function () { + fetchedOn = minimumDate; + }); + + return factory; + + /*** Implementations ***/ + + function createUser(user) { + return dataContext.createEntity('Users', user); + } + + function deleteUser(user) { + user.entityAspect.setDeleted(); + } + + function getChanges() { + return dataContext.getChanges(); + } + + function getChangesCount() { + return dataContext.getChangesCount(); + } + + function getUserSet(forceRefresh) { + var count; + if (forceRefresh) { + if (dataContext.hasChanges()) { + count = dataContext.getChangesCount(); + dataContext.rejectChanges(); // undo all unsaved changes! + logger.logWarning('Discarded ' + count + ' pending change(s)', null); + } + } + + var query = breeze.EntityQuery + .from('Users') + ; + + // Fetch the data from server, in case if it's not fetched earlier or forced + var fetchFromServer = fetchedOn === minimumDate || forceRefresh; + + // Prepare the query + if (fetchFromServer) { // From remote + query = query.using(breeze.FetchStrategy.FromServer); + fetchedOn = new Date(); + } + else { // From local + query = query.using(breeze.FetchStrategy.FromLocalCache); + } + + return dataContext.executeQuery(query) + .then(success).catch(failed); + + function success(response) { + count = response.results.length; + //logger.logSuccess('Got ' + count + ' user(s)', response); + return response.results; + } + + function failed(error) { + var message = error.message || 'User query failed'; + logger.logError(message, error, true); + } + } + + function getUser(userId, forceRefresh) { + return dataContext.fetchEntityByKey('User', userId, !forceRefresh) + .then(success).catch(failed); + + function success(result) { + return result.entity; + } + + function failed(error) { + var message = error.message || 'getUser query failed'; + logger.logError(message, error, true); + } + } + + function hasChanges() { + return dataContext.hasChanges(); + } + + function rejectChanges() { + dataContext.rejectChanges(); + } + + function saveChanges(delay) { + return dataContext.saveChanges(delay); + } + + function saveChangesAlt(user, delay) { + + var entities = [user]; + + // TODO This approach is not good, controller should directly pass 'entities', otherwise factory cannot know whether it should only pass 'parent entity' or with its 'children'?' + // Compare this with resourcePoolFactory saveChanges, use same approach + // coni2k - 15 Feb. '16 + + return dataContext.saveChangesAlt(entities, delay); + } + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'FairShareIndexSampleController'; + angular.module('main') + .controller(controllerId, ['userFactory', 'logger', FairShareIndexSampleController]); + + function FairShareIndexSampleController(userFactory, logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + } +})(); + +(function () { + 'use strict'; + + var controllerId = 'ResourcePoolRateSampleController'; + angular.module('main') + .controller(controllerId, ['logger', ResourcePoolRateSampleController]); + + function ResourcePoolRateSampleController(logger) { + + logger = logger.forSource(controllerId); + + var vm = this; + vm.resourcePoolRate_SampleResourcePoolId = 12; + } +})(); diff --git a/ngClient/_system/js/app/app.min.js b/ngClient/_system/js/app/app.min.js new file mode 100644 index 000000000..03f803bff --- /dev/null +++ b/ngClient/_system/js/app/app.min.js @@ -0,0 +1,5 @@ +!function(){"use strict";function e(e){e=e.forSource("mainRun")}angular.module("main",["ngRoute","ngSanitize","breeze.angular","angular-google-analytics","angularUtils.directives.dirDisqus","ui.bootstrap","highcharts-ng"]),angular.module("main").run(["logger",e])}(),function(){"use strict";function e(e){e.interceptors.push(r)}function t(e,t){t=t.forSource("authorizationRun");var n=e.OData.defaultHttpClient,r={request:function(t,r,l){t.headers=t.headers||{};var o=angular.fromJson(e.localStorage.getItem("token"));return t.headers.Authorization=null!==o?"Bearer "+o.access_token:"",n.request(t,r,l)}};e.OData.defaultHttpClient=r}function n(e,t,n){return n=n.forSource(r),{request:function(e){e.headers=e.headers||{};var n=angular.fromJson(t.localStorage.getItem("token"));return e.headers.Authorization=null!==n?"Bearer "+n.access_token:"",e},response:function(t){return 401===t.status,t||e.when(t)}}}angular.module("main").config(["$httpProvider",e]),angular.module("main").run(["$window","logger",t]);var r="angularInterceptor";angular.module("main").factory(r,["$q","$window","logger",n])}(),function(){"use strict";function e(e){function t(e){var t=null;"object"==typeof document?(t=document.createElement("a"),t.href=e.serviceName):t=url.parse(e.serviceName);var n=t.pathname;return"/"!==n[0]&&(n="/"+n),"/"!==n.substr(-1)&&(n+="/"),n}breeze.config.initializeAdapterInstance("uriBuilder","odata");var n=breeze.config.initializeAdapterInstance("dataService","webApiOData",!0);n.getRoutePrefix=t}angular.module("main").config(["breezeProvider",e])}(),function(){"use strict";function e(e){e.decorator("$exceptionHandler",["$delegate","$injector","$window","serviceAppUrl","logger",t])}function t(e,t,r,l,o){function i(e){function n(e){if(a[e])return a[e];var t=o.get(e).then(function(t){var n=t.data.match(/\/\/# sourceMappingURL=(.+\.map)/);if(n){var r=e.match(/^(.+)\/[^/]+$/);return r=r&&r[1],o.get(r+"/"+n[1]).then(function(e){return new i(e.data)})}return l.reject()});return a[e]=t,t}var l=t.get("$q"),o=t.get("$http"),i=r.sourceMap.SourceMapConsumer,a={};return e.stack?l.all($.map(e.stack.split(/\n/),function(e){var t=e.match(/^(.+)(http.+):(\d+):(\d+)/);if(t){var o=t[1],i=t[2],a=t[3],u=t[4];return n(i).then(function(e){var t=e.originalPositionFor({line:parseInt(a,10),column:parseInt(u,10)}),n=o.match(/\s*(at)?\s*(.*?)\s*(\(|@)/);return n=n&&n[2]||""," at "+(t.name?t.name:n)+" "+r.location.origin+t.source+":"+t.line+":"+t.column},function(){return e})}return l.when(e)})).then(function(e){return e.join("\n")}):l.when("")}o=o.forSource(n);var a=l+"/api/Exception/Record";return function(e,n){o.logError("Something went wrong, please try again later!",null,!0),i(e).then(function(r){var l=t.get("$location"),o=t.get("$http"),i={Message:e.message,Cause:n,Url:l.url(),Stack:r};o.post(a,i),setTimeout(function(){throw e})})}}var n="exceptionHandlerExtension";angular.module("main").config(["$provide",e])}(),function(){"use strict";function e(e,t,n){e.setAccount(t).setDomainName(n).ignoreFirstPageLoad(!0)}angular.module("main").config(["AnalyticsProvider","analyticsTrackingCode","analyticsDomainName",e]),angular.module("main").run(["Analytics",function(e){}])}(),function(){"use strict";function e(e,t){function n(e){var t="undefined"!=typeof e.key?e.key[0]+e.key.substring(1):"Home";return t}function r(e){var t="undefined"!=typeof e.key?e.key:"home";return"/_system/views/content/"+t+".html?v=0.49.0"}function l(e,t,n,r,l,o){o=o.forSource("validateAccess");var i=n.defer();return r.createItem(l,t.current).then(function(){e.getCurrentUser().then(function(e){"undefined"!==t.current.accessType&&("unauthenticatedRequired"===t.current.accessType&&e.isAuthenticated()||"authenticatedRequired"===t.current.accessType&&!e.isAuthenticated())&&i.reject({accessType:t.current.accessType}),i.resolve()})["catch"](function(){i.reject()})}),i.promise}e.when("/",{title:n,templateUrl:r,enableDisqus:!0,resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/default.aspx",{title:n,templateUrl:r,enableDisqus:!0,resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/content/404/",{title:function(){return"404"},templateUrl:"/_system/views/content/404.html?v=0.49.0",enableDisqus:!1,resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/content/:key/",{title:n,templateUrl:r,enableDisqus:!0,resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/resourcePool",{title:function(){return"CMRP List"},templateUrl:"/_system/views/resourcePool/resourcePoolList.html?v=0.49.1",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/resourcePool/new",{title:function(){return"New CMRP"},templateUrl:"/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/resourcePool/:resourcePoolId/edit",{title:function(){return"Edit CMRP"},templateUrl:"/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/resourcePool/:resourcePoolId",{title:function(){return"View CMRP"},templateUrl:"/_system/views/resourcePool/resourcePoolView.html?v=0.49.0",enableDisqus:!0,resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/accountEdit",{title:function(){return"Account Edit"},templateUrl:"/_system/views/account/accountEdit.html?v=0.49.0",accessType:"authenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/addPassword",{title:function(){return"Add Password"},templateUrl:"/_system/views/account/addPassword.html?v=0.49.0",accessType:"authenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/changeEmail",{title:function(){return"Change Email"},templateUrl:"/_system/views/account/changeEmail.html?v=0.49.0",accessType:"authenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/changePassword",{title:function(){return"Change Password"},templateUrl:"/_system/views/account/changePassword.html?v=0.49.0",accessType:"authenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/confirmEmail",{title:function(){return"Confirm Email"},templateUrl:"/_system/views/account/confirmEmail.html?v=0.49.0",accessType:"authenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/login",{title:function(){return"Login"},templateUrl:"/_system/views/account/login.html?v=0.49.0",accessType:"unauthenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/register",{title:function(){return"Register"},templateUrl:"/_system/views/account/register.html?v=0.49.0",accessType:"unauthenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).when("/_system/account/resetPassword",{title:function(){return"Reset Password"},templateUrl:"/_system/views/account/resetPassword.html?v=0.49.0",accessType:"unauthenticatedRequired",resolve:{validateAccess:["userFactory","$route","$q","locationHistory","$location","logger",l]}}).otherwise({redirectTo:"/_system/content/404"}),window.history&&window.history.pushState&&t.html5Mode({enabled:!0})}function t(e,t,n,r){function l(e,r,l,o){"unauthenticatedRequired"===o.accessType?t.url(n.previousItem("unauthenticatedRequired").url()):"authenticatedRequired"===o.accessType&&t.url("/_system/account/login?error=To be able to continue, please login first")}function o(t,n,r){var l="";"undefined"!=typeof n.title&&(l=n.title(n.params)),e.viewTitle=l}r=r.forSource("routeRun"),e.$on("$routeChangeSuccess",o),e.$on("$routeChangeError",l)}angular.module("main").config(["$routeProvider","$locationProvider",e]),angular.module("main").run(["$rootScope","$location","locationHistory","logger",t])}(),function(){"use strict";function e(e,n){function r(){function e(){var e=0;return F.ElementItemSet.forEach(function(t){e+=t.directIncome()}),e}function t(){return null===F.backingFields._directIncomeField&&F.setDirectIncomeField(),F.backingFields._directIncomeField}function n(){var e=0;return F.ElementItemSet.forEach(function(t){e+=t.directIncomeIncludingResourcePoolAmount()}),e}function r(){return null===F.backingFields._elementFieldIndexSet&&F.setElementFieldIndexSet(),F.backingFields._elementFieldIndexSet}function l(){return null===F.backingFields._familyTree&&F.setFamilyTree(),F.backingFields._familyTree}function o(){return F.ElementFieldSet.length>4||F.elementFieldIndexSet().length>2}function i(e){var t=e.ElementFieldSet.sort(function(e,t){return e.SortOrder-t.SortOrder}),n=[];return t.forEach(function(e){if(e.IndexEnabled&&n.push(e),6===e.DataType&&null!==e.SelectedElement){var t=i(e.SelectedElement);t.forEach(function(e){n.push(e)})}}),n}function a(){return null===F.backingFields._indexRating&&F.setIndexRating(!1),F.backingFields._indexRating}function u(){var e=0;return F.ElementItemSet.forEach(function(t){e+=t.multiplier()}),e}function c(){return null!==F.backingFields._multiplierField&&F.setMultiplierField(),F.backingFields._multiplierField}function s(){return null===F.backingFields._parent&&F.setParent(),F.backingFields._parent}function d(){var e=0;return F.ElementItemSet.forEach(function(t){e+=t.resourcePoolAmount()}),e}function m(){var e=F.ElementFieldSet.filter(function(e){return 11===e.DataType});e.length>0&&(F.backingFields._directIncomeField=e[0])}function f(){F.backingFields._elementFieldIndexSet=i(F)}function g(){F.backingFields._familyTree=[];for(var e=F;null!==e;)F.backingFields._familyTree.unshift(e),e=e.parent()}function E(e){e="undefined"==typeof e?!0:e;var t=F.elementFieldIndexSet(),n=0;t.forEach(function(e){n+=e.indexRating()}),F.backingFields._indexRating!==n&&(F.backingFields._indexRating=n,e&&F.elementFieldIndexSet().forEach(function(e){e.setIndexRatingPercentage()}))}function h(){var e=F.ElementFieldSet.filter(function(e){return 12===e.DataType});e.length>0&&(F.backingFields._multiplierField=e[0])}function p(){F.ParentFieldSet.length>0&&(F.backingFields._parent=F.ParentFieldSet[0].Element)}function y(){var e=0;return F.ElementItemSet.forEach(function(t){e+=t.totalDirectIncome()}),e}function R(){var e=0;return F.ElementItemSet.forEach(function(t){e+=t.totalDirectIncomeIncludingResourcePoolAmount()}),e}function P(){var e=0;return F.ElementItemSet.forEach(function(t){e+=t.totalIncome()}),e}function v(){return 0===F.ElementItemSet.length?0:F.totalIncome()/F.ElementItemSet.length}function C(){var e;return F===F.ResourcePool.mainElement()?(e=F.ResourcePool.InitialValue,F.ElementItemSet.forEach(function(t){e+=t.totalResourcePoolAmount()})):null!==F.ResourcePool.mainElement()&&(e=F.ResourcePool.mainElement().totalResourcePoolAmount()),F.backingFields._totalResourcePoolAmount!==e&&(F.backingFields._totalResourcePoolAmount=e,F.elementFieldIndexSet().forEach(function(e){e.setIndexIncome()})),e}var F=this;F.Id=0,F.Name="",F.backingFields={_IsMainElement:!1,_parent:null,_familyTree:null,_elementFieldIndexSet:null,_indexRating:null,_directIncomeField:null,_multiplierField:null,_totalResourcePoolAmount:null},F.isEditing=!1,F.directIncome=e,F.directIncomeField=t,F.directIncomeIncludingResourcePoolAmount=n,F.elementFieldIndexSet=r,F.familyTree=l,F.fullSize=o,F.indexRating=a,F.multiplier=u,F.multiplierField=c,F.parent=s,F.resourcePoolAmount=d,F.setDirectIncomeField=m,F.setElementFieldIndexSet=f,F.setFamilyTree=g,F.setIndexRating=E,F.setMultiplierField=h,F.setParent=p,F.totalDirectIncome=y,F.totalDirectIncomeIncludingResourcePoolAmount=R,F.totalIncome=P,F.totalIncomeAverage=v,F.totalResourcePoolAmount=C}return n=n.forSource(t),Object.defineProperty(r.prototype,"IsMainElement",{enumerable:!0,configurable:!0,get:function(){return this.backingFields._IsMainElement},set:function(e){var t=this;if(t.backingFields._IsMainElement!==e){if(t.backingFields._IsMainElement=e,"undefined"==typeof t.ResoucePool)return;e&&(t.ResourcePool.ElementSet.forEach(function(e){e!==t&&e.IsMainElement&&(e.IsMainElement=!1)}),t.ResourcePool.selectedElement(t))}}}),r}var t="Element";angular.module("main").factory(t,["$rootScope","logger",e])}(),function(){"use strict";function e(e){function n(){function e(){return null===U.backingFields._aggressiveRating&&U.setAggressiveRating(!1),U.backingFields._aggressiveRating}function t(){return U.UserElementCellSet.length>0?U.UserElementCellSet[0]:null}function n(){return null===U.backingFields._currentUserNumericValue&&U.setCurrentUserNumericValue(!1),U.backingFields._currentUserNumericValue}function r(){return U.setIndexIncome(),U.backingFields._indexIncome}function l(){return null===U.backingFields._numericValue&&U.setNumericValue(!1),U.backingFields._numericValue}function o(){return null===U.numericValueCount()?null:0===U.numericValueCount()?0:U.numericValueTotal()/U.numericValueCount()}function i(){return U.ElementField.UseFixedValue?null!==U.currentUserCell()&&U.currentUserCell().UserId===U.ElementField.Element.ResourcePool.UserId?1:U.otherUsersNumericValueCount():U.otherUsersNumericValueCount()+1}function a(){return null===U.backingFields._numericValueMultiplied&&U.setNumericValueMultiplied(!1),U.backingFields._numericValueMultiplied}function u(){return null===U.backingFields._numericValueMultipliedPercentage&&U.setNumericValueMultipliedPercentage(!1),U.backingFields._numericValueMultipliedPercentage}function c(){return U.ElementField.UseFixedValue?null!==U.currentUserCell()&&U.currentUserCell().UserId===U.ElementField.Element.ResourcePool.UserId?U.currentUserNumericValue():U.otherUsersNumericValueTotal():U.otherUsersNumericValueTotal()+U.currentUserNumericValue()}function s(){return null===U.backingFields._otherUsersNumericValueCount&&U.setOtherUsersNumericValueCount(),U.backingFields._otherUsersNumericValueCount}function d(){return null===U.backingFields._otherUsersNumericValueTotal&&U.setOtherUsersNumericValueTotal(),U.backingFields._otherUsersNumericValueTotal}function m(){return null===U.backingFields._passiveRating&&U.setPassiveRating(!1),U.backingFields._passiveRating}function f(){return null===U.backingFields._rating&&U.setRating(!1),U.backingFields._rating}function g(){return null===U.backingFields._ratingPercentage&&U.setRatingPercentage(!1),U.backingFields._ratingPercentage}function E(e){e="undefined"==typeof e?!0:e;var t=0;if(U.ElementField.IndexEnabled&&U.ElementField.referenceRatingMultiplied()>0){switch(U.ElementField.IndexSortType){case 1:t=(1-U.numericValueMultipliedPercentage())/U.ElementField.referenceRatingMultiplied();break;case 2:t=U.numericValueMultiplied()/U.ElementField.referenceRatingMultiplied()}U.ElementField.referenceRatingAllEqualFlag()||(t=1-t)}U.backingFields._aggressiveRating!==t&&(U.backingFields._aggressiveRating=t)}function h(e){e="undefined"==typeof e?!0:e;var t,n=U.currentUserCell();switch(U.ElementField.DataType){case 2:t=null!==n?n.BooleanValue:0;break;case 3:t=null!==n?n.IntegerValue:0;break;case 4:t=null!==n?n.DecimalValue:50;break;case 11:t=null!==U.NumericValueTotal?U.NumericValueTotal:0;break;case 12:t=null!==n?n.DecimalValue:0}U.backingFields._currentUserNumericValue!==t&&(U.backingFields._currentUserNumericValue=t,e&&U.setNumericValue())}function p(e){e="undefined"==typeof e?!0:e;var t=0;6===U.ElementField.DataType&&null!==U.SelectedElementItem?t=U.SelectedElementItem.totalResourcePoolIncome()/U.SelectedElementItem.ParentCellSet.length:U.ElementField.IndexEnabled&&(t=U.ElementField.indexIncome()*U.ratingPercentage()),U.backingFields._indexIncome!==t&&(U.backingFields._indexIncome=t)}function y(e){e="undefined"==typeof e?!0:e;var t;if("undefined"!=typeof U.ElementField)switch(U.ElementField.Element.ResourcePool.RatingMode){case 1:t=U.currentUserNumericValue();break;case 2:t=U.numericValueAverage()}U.backingFields._numericValue!==t&&(U.backingFields._numericValue=t,e&&(11===U.ElementField.DataType&&U.ElementItem.setDirectIncome(),U.setNumericValueMultiplied()))}function R(e){e="undefined"==typeof e?!0:e;var t;t="undefined"==typeof U.ElementField?0:U.numericValue()*U.ElementItem.multiplier(),U.backingFields._numericValueMultiplied!==t&&(U.backingFields._numericValueMultiplied=t,e&&U.ElementField.setNumericValueMultiplied())}function P(e){e="undefined"==typeof e?!0:e;var t=0;U.ElementField.IndexEnabled&&U.ElementField.numericValueMultiplied()>0&&(t=U.numericValueMultiplied()/U.ElementField.numericValueMultiplied()),U.backingFields._numericValueMultipliedPercentage!==t&&(U.backingFields._numericValueMultipliedPercentage=t)}function v(){U.backingFields._otherUsersNumericValueCount=U.NumericValueCount,U.UserElementCellSet.length>0&&U.backingFields._otherUsersNumericValueCount--}function C(){if(U.backingFields._otherUsersNumericValueTotal=null!==U.NumericValueTotal?U.NumericValueTotal:0,U.UserElementCellSet.length>0){var e=0;switch(U.ElementField.DataType){case 2:e=U.UserElementCellSet[0].BooleanValue;break;case 3:e=U.UserElementCellSet[0].IntegerValue;break;case 4:e=U.UserElementCellSet[0].DecimalValue;break;case 11:e=U.UserElementCellSet[0].DecimalValue}U.backingFields._otherUsersNumericValueTotal-=e}}function F(e){e="undefined"==typeof e?!0:e;var t=0;if(U.ElementField.IndexEnabled)switch(U.ElementField.IndexSortType){case 1:t=U.numericValueMultipliedPercentage();break;case 2:U.ElementField.passiveRating()>0&&(t=(1-U.numericValueMultipliedPercentage())/U.ElementField.passiveRating())}U.backingFields._passiveRating!==t&&(U.backingFields._passiveRating=t)}function I(e){e="undefined"==typeof e?!0:e;var t=0;if(1===U.ElementField.ElementCellSet.length)t=1;else switch(U.ElementField.IndexCalculationType){case 1:t=U.aggressiveRating();break;case 2:t=U.passiveRating()}U.backingFields._rating!==t&&(U.backingFields._rating=t)}function S(e){e="undefined"==typeof e?!0:e;var t=0;U.ElementField.IndexEnabled&&U.ElementField.rating()>0&&(t=U.rating()/U.ElementField.rating()),U.backingFields._ratingPercentage!==t&&(U.backingFields._ratingPercentage=t)}function b(){var e=null;switch(U.ElementField.DataType){case 1:U.UserElementCellSet.length>0&&(e=U.UserElementCellSet[0].StringValue);break;case 2:U.UserElementCellSet.length>0&&(e=U.UserElementCellSet[0].BooleanValue?"True":"False");break;case 3:U.UserElementCellSet.length>0&&(e=U.UserElementCellSet[0].IntegerValue);break;case 4:case 11:case 12:U.UserElementCellSet.length>0&&(e=U.UserElementCellSet[0].DecimalValue);break;case 6:null!==U.SelectedElementItem&&(e=U.SelectedElementItem.Name)}return e}var U=this;U.Id=0,U.ElementFieldId=0,U.ElementItemId=0,U.StringValue="",U.NumericValueTotal=0,U.NumericValueCount=0,U.SelectedElementItemId=null,U.backingFields={_currentUserNumericValue:null,_otherUsersNumericValueTotal:null,_otherUsersNumericValueCount:null,_numericValue:null,_numericValueMultiplied:null,_numericValueMultipliedPercentage:null,_passiveRating:null,_aggressiveRating:null,_rating:null,_ratingPercentage:null,_indexIncome:null},U.isEditing=!1,U.aggressiveRating=e,U.currentUserCell=t,U.currentUserNumericValue=n,U.indexIncome=r,U.numericValue=l,U.numericValueAverage=o,U.numericValueCount=i,U.numericValueMultiplied=a,U.numericValueMultipliedPercentage=u,U.numericValueTotal=c,U.otherUsersNumericValueCount=s,U.otherUsersNumericValueTotal=d,U.passiveRating=m,U.rating=f,U.ratingPercentage=g,U.setAggressiveRating=E,U.setCurrentUserNumericValue=h,U.setIndexIncome=p,U.setNumericValue=y,U.setNumericValueMultiplied=R,U.setNumericValueMultipliedPercentage=P,U.setOtherUsersNumericValueCount=v,U.setOtherUsersNumericValueTotal=C,U.setPassiveRating=F,U.setRating=I,U.setRatingPercentage=S,U.value=b}return e=e.forSource(t),n}var t="ElementCell";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e,n){function r(){function e(){return b.UserElementFieldSet.length>0?b.UserElementFieldSet[0]:null}function t(){return null===b.backingFields._currentUserIndexRating&&b.setCurrentUserIndexRating(!1),b.backingFields._currentUserIndexRating}function n(){return null===b.backingFields._indexIncome&&b.setIndexIncome(!1),b.backingFields._indexIncome}function r(){return null===b.backingFields._indexRating&&b.setIndexRating(!1),b.backingFields._indexRating}function l(){return null===b.indexRatingCount()?null:0===b.indexRatingCount()?0:b.indexRatingTotal()/b.indexRatingCount()}function o(){return b.otherUsersIndexRatingCount()+1}function i(){return null===b.backingFields._indexRatingPercentage&&b.setIndexRatingPercentage(!1),b.backingFields._indexRatingPercentage}function a(){return b.otherUsersIndexRatingTotal()+b.currentUserIndexRating()}function u(){return null===b.backingFields._numericValueMultiplied&&b.setNumericValueMultiplied(!1),b.backingFields._numericValueMultiplied}function c(){return null===b.backingFields._otherUsersIndexRatingCount&&b.setOtherUsersIndexRatingCount(),b.backingFields._otherUsersIndexRatingCount}function s(){return null===b.backingFields._otherUsersIndexRatingTotal&&b.setOtherUsersIndexRatingTotal(),b.backingFields._otherUsersIndexRatingTotal}function d(){return null===b.backingFields._passiveRating&&b.setPassiveRating(!1),b.backingFields._passiveRating}function m(){return null===b.backingFields._rating&&b.setRating(!1),b.backingFields._rating}function f(e){return b.backingFields._referenceRatingAllEqualFlag}function g(){return null===b.backingFields._referenceRatingMultiplied&&b.setReferenceRatingMultiplied(!1),b.backingFields._referenceRatingMultiplied}function E(e){e="undefined"==typeof e?!0:e;var t=null!==b.currentUserElementField()?b.currentUserElementField().Rating:50;b.backingFields._currentUserIndexRating!==t&&(b.backingFields._currentUserIndexRating=t,e&&b.setIndexRating())}function h(e){e="undefined"==typeof e?!0:e;var t=b.Element.totalResourcePoolAmount()*b.indexRatingPercentage();b.backingFields._indexIncome!==t&&(b.backingFields._indexIncome=t,e&&b.ElementCellSet.forEach(function(e){e.setIndexIncome()}))}function p(e){e="undefined"==typeof e?!0:e;var t=0;switch(b.Element.ResourcePool.RatingMode){case 1:t=b.currentUserIndexRating();break;case 2:t=b.indexRatingAverage()}b.backingFields._indexRating!==t&&(b.backingFields._indexRating=t,e&&b.Element.ResourcePool.mainElement().setIndexRating())}function y(e){e="undefined"==typeof e?!0:e;var t=0,n=b.Element.ResourcePool.mainElement().indexRating();t=0===n?0:b.indexRating()/n,b.backingFields._indexRatingPercentage!==t&&(b.backingFields._indexRatingPercentage=t,e&&b.setIndexIncome())}function R(e){e="undefined"==typeof e?!0:e;var t=0;0===b.ElementCellSet.length?t=0:b.ElementCellSet.forEach(function(e){t+=e.numericValueMultiplied()}),b.backingFields._numericValueMultiplied!==t&&(b.backingFields._numericValueMultiplied=t,e&&b.IndexEnabled&&(b.ElementCellSet.forEach(function(e){e.setNumericValueMultipliedPercentage(!1)}),b.setPassiveRating(!1),b.ElementCellSet.forEach(function(e){e.setPassiveRating(!1)}),b.setReferenceRatingMultiplied(!1),b.ElementCellSet.forEach(function(e){e.setAggressiveRating(!1)}),b.ElementCellSet.forEach(function(e){e.setRating(!1)}),b.setRating(!1),b.ElementCellSet.forEach(function(e){e.setRatingPercentage(!1)}),b.ElementCellSet.forEach(function(e){e.setIndexIncome(!1)})))}function P(){b.backingFields._otherUsersIndexRatingCount=b.IndexRatingCount,null!==b.currentUserElementField()&&b.backingFields._otherUsersIndexRatingCount--}function v(){b.backingFields._otherUsersIndexRatingTotal=null!==b.IndexRatingTotal?b.IndexRatingTotal:0,null!==b.currentUserElementField()&&(b.backingFields._otherUsersIndexRatingTotal-=b.currentUserElementField().Rating)}function C(e){e="undefined"==typeof e?!0:e;var t=0;b.ElementCellSet.forEach(function(e){t+=1-e.numericValueMultipliedPercentage()}),b.backingFields._passiveRating!==t&&(b.backingFields._passiveRating=t)}function F(e){e="undefined"==typeof e?!0:e;var t=0;b.ElementCellSet.forEach(function(e){t+=e.rating()}),b.backingFields._rating!==t&&(b.backingFields._rating=t,e&&(b.ElementCellSet.forEach(function(e){e.setRatingPercentage(!1)}),b.setIndexIncome()))}function I(e){return b.backingFields._referenceRatingAllEqualFlag!==e?(b.backingFields._referenceRatingAllEqualFlag=e,!0):!1}function S(e){e="undefined"==typeof e?!0:e;var t=null,n=!0;0===b.ElementCellSet.length?t=0:b.ElementCellSet.forEach(function(e){if(null===t)switch(b.IndexSortType){case 1:t=1-e.numericValueMultipliedPercentage();break;case 2:t=e.numericValueMultiplied()}else switch(b.IndexSortType){case 1:1-e.numericValueMultipliedPercentage()!==t&&(n=!1),1-e.numericValueMultipliedPercentage()>t&&(t=1-e.numericValueMultipliedPercentage());break;case 2:e.numericValueMultiplied()!==t&&(n=!1),e.numericValueMultiplied()>t&&(t=e.numericValueMultiplied())}});var r=b.setReferenceRatingAllEqualFlag(n),l=!1;b.backingFields._referenceRatingMultiplied!==t&&(b.backingFields._referenceRatingMultiplied=t,l=!0),(r||l)&&e&&b.ElementCellSet.forEach(function(e){e.setAggressiveRating(!1)})}var b=this;b.Id=0,b.ElementId=0,b.Name="",b.SelectedElementId=null,b.UseFixedValue=null,b.IndexCalculationType=0,b.IndexSortType=0,b.SortOrder=0,b.IndexRatingTotal=0,b.IndexRatingCount=0,b.backingFields={_dataType:1,_indexEnabled:!1,_currentUserIndexRating:null,_otherUsersIndexRatingTotal:null,_otherUsersIndexRatingCount:null,_indexRating:null,_indexRatingPercentage:null,_numericValueMultiplied:null,_passiveRating:null,_referenceRatingMultiplied:null,_referenceRatingAllEqualFlag:!0,_aggressiveRating:null,_rating:null,_indexIncome:null},b.isEditing=!1,b.currentUserElementField=e,b.currentUserIndexRating=t,b.indexIncome=n,b.indexRating=r,b.indexRatingAverage=l,b.indexRatingCount=o,b.indexRatingPercentage=i,b.indexRatingTotal=a,b.numericValueMultiplied=u,b.otherUsersIndexRatingCount=c,b.otherUsersIndexRatingTotal=s,b.passiveRating=d,b.rating=m,b.referenceRatingAllEqualFlag=f,b.referenceRatingMultiplied=g,b.setCurrentUserIndexRating=E,b.setIndexIncome=h,b.setIndexRating=p,b.setIndexRatingPercentage=y,b.setNumericValueMultiplied=R,b.setOtherUsersIndexRatingCount=P,b.setOtherUsersIndexRatingTotal=v,b.setPassiveRating=C,b.setRating=F,b.setReferenceRatingAllEqualFlag=I,b.setReferenceRatingMultiplied=S}return n=n.forSource(t),Object.defineProperty(r.prototype,"DataType",{enumerable:!0,configurable:!0,get:function(){return this.backingFields._dataType},set:function(t){var n=this;n.backingFields._dataType!==t&&(n.ElementCellSet.forEach(function(r){r.SelectedElementItemId=null;var l=r.UserElementCellSet.slice();if(l.forEach(function(e){e.entityAspect.setDetached()}),6!==t){var o=r.currentUserCell(),i=null===o;switch(i&&(o={User:n.Element.ResourcePool.User,ElementCell:r}),t){case 1:o.StringValue="";break;case 2:o.BooleanValue=!1;break;case 3:o.IntegerValue=0;break;case 4:o.DecimalValue=50;break;case 11:o.DecimalValue=100;break;case 12:o.DecimalValue=0}i&&e.$broadcast("ElementField_createUserElementCell",o)}}),n.backingFields._dataType=t)}}),Object.defineProperty(r.prototype,"IndexEnabled",{enumerable:!0,configurable:!0,get:function(){return this.backingFields._indexEnabled},set:function(e){this.backingFields._indexEnabled!==e&&(this.backingFields._indexEnabled=e,this.IndexCalculationType=e?1:0,this.IndexSortType=e?1:0)}}),r}var t="ElementField";angular.module("main").factory(t,["$rootScope","logger",e])}(),function(){"use strict";function e(e){function n(){function e(){return null===y.backingFields._directIncome&&y.setDirectIncome(!1),y.backingFields._directIncome}function t(){return y.directIncome()+y.resourcePoolAmount()}function n(){return null===y.backingFields._elementCellIndexSet&&y.setElementCellIndexSet(),y.backingFields._elementCellIndexSet}function r(e){var t=[],n=e.ElementCellSet.sort(function(e,t){return e.ElementField.SortOrder-t.ElementField.SortOrder});return n.forEach(function(e){if(e.ElementField.IndexEnabled&&t.push(e),6===e.ElementField.DataType&&null!==e.SelectedElementItem){var n=r(e.SelectedElementItem);n.length>0&&t.push(e)}}),t}function l(){var e=y.totalIncome(),t=Number(y.Element.totalIncomeAverage().toFixed(2));return e===t?"average":t>e?"low":e>t?"high":void 0}function o(){return null===y.backingFields._multiplier&&y.setMultiplier(!1),y.backingFields._multiplier}function i(){return null===y.backingFields._resourcePoolAmount&&y.setResourcePoolAmount(!1),y.backingFields._resourcePoolAmount}function a(e){e="undefined"==typeof e?!0:e;var t=null,n=y.ElementCellSet.filter(function(e){return 11===e.ElementField.DataType});n.length>0&&(t=n[0]);var r;r=null===t?0:t.numericValue(),y.backingFields._directIncome!==r&&(y.backingFields._directIncome=r,e&&(y.setTotalDirectIncome(),y.setResourcePoolAmount()))}function u(){y.backingFields._elementCellIndexSet=r(y)}function c(e){e="undefined"==typeof e?!0:e;var t=null,n=y.ElementCellSet.filter(function(e){return 12===e.ElementField.DataType});n.length>0&&(t=n[0]);var r=0;r=null===t?1:null===t.currentUserCell()||null===t.currentUserCell().DecimalValue?0:t.currentUserCell().DecimalValue,y.backingFields._multiplier!==r&&(y.backingFields._multiplier=r,y.setTotalDirectIncome(),y.setTotalResourcePoolAmount())}function s(e){e="undefined"==typeof e?!0:e;var t=y.directIncome()*y.Element.ResourcePool.resourcePoolRatePercentage();y.backingFields._resourcePoolAmount!==t&&(y.backingFields._resourcePoolAmount=t,e&&y.setTotalResourcePoolAmount())}function d(e){e="undefined"==typeof e?!0:e;var t=y.directIncome()*y.multiplier();y.backingFields._totalDirectIncome!==t&&(y.backingFields._totalDirectIncome=t)}function m(e){e="undefined"==typeof e?!0:e;var t=y.resourcePoolAmount()*y.multiplier();y.backingFields._totalResourcePoolAmount!==t&&(y.backingFields._totalResourcePoolAmount=t)}function f(){return null===y.backingFields._totalDirectIncome&&y.setTotalDirectIncome(!1),y.backingFields._totalDirectIncome}function g(){return y.directIncomeIncludingResourcePoolAmount()*y.multiplier()}function E(){var e=y.totalDirectIncome()+y.totalResourcePoolIncome();return Number(e.toFixed(2))}function h(){return null===y.backingFields._totalResourcePoolAmount&&y.setTotalResourcePoolAmount(!1),y.backingFields._totalResourcePoolAmount}function p(){var e=0;return y.ElementCellSet.forEach(function(t){e+=t.indexIncome()}),y.backingFields._totalResourcePoolIncome!==e&&(y.backingFields._totalResourcePoolIncome=e,y.ParentCellSet.forEach(function(e){e.setIndexIncome()})),e}var y=this;y.Id=0,y.ElementId=0,y.Name="",y.backingFields={_elementCellIndexSet:null,_directIncome:null,_multiplier:null,_totalDirectIncome:null,_resourcePoolAmount:null,_totalResourcePoolAmount:null,_totalResourcePoolIncome:null},y.isEditing=!1,y.directIncome=e,y.directIncomeIncludingResourcePoolAmount=t,y.elementCellIndexSet=n,y.incomeStatus=l,y.multiplier=o,y.resourcePoolAmount=i,y.setDirectIncome=a,y.setElementCellIndexSet=u,y.setMultiplier=c,y.setResourcePoolAmount=s,y.setTotalDirectIncome=d,y.setTotalResourcePoolAmount=m,y.totalDirectIncome=f,y.totalDirectIncomeIncludingResourcePoolAmount=g,y.totalIncome=E,y.totalResourcePoolAmount=h,y.totalResourcePoolIncome=p}return e=e.forSource(t),n}var t="ElementItem";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e){e=e.forSource(t);var n={};return n.ElementFieldDataType={String:1,Boolean:2,Integer:3,Decimal:4,Element:6,DirectIncome:11,Multiplier:12},n.ElementFieldIndexCalculationType={Aggressive:1,Passive:2},n.ElementFieldIndexSortType={Highest:1,Lowest:2},n.getEnumKey=function(e,t){for(var r in n){if("$get"===e||"getEnumKey"===e)return;if(r===e)for(var l in n[r])if(n[r][l]===t)return l; +}},n}var t="Enums";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e){function n(){function e(e){if(e="undefined"!=typeof e?e:!1){var t=[];S.UserResourcePoolSet.forEach(function(e){S.ResourcePoolRateTotal+=e.ResourcePoolRate,S.ResourcePoolRateCount+=1,-1===t.indexOf(e.UserId)&&t.push(e.UserId)}),S.ElementSet.forEach(function(e){e.ElementFieldSet.forEach(function(e){e.UserElementFieldSet.forEach(function(n){e.IndexRatingTotal+=n.IndexRating,e.IndexRatingCount+=1,-1===t.indexOf(n.UserId)&&t.push(n.UserId)}),e.ElementCellSet.forEach(function(n){n.UserElementCellSet.forEach(function(r){n.StringValue="",n.NumericValueTotal+=r.DecimalValue,n.NumericValueCount+=1,e.IndexEnabled&&-1===t.indexOf(r.UserId)&&t.push(r.UserId)})})})}),S.RatingCount=t.length}S.setOtherUsersResourcePoolRateTotal(),S.setOtherUsersResourcePoolRateCount(),"undefined"!=typeof S.ElementSet&&S.ElementSet.forEach(function(e){"undefined"!=typeof e.ElementFieldSet&&e.ElementFieldSet.forEach(function(e){e.setOtherUsersIndexRatingTotal(),e.setOtherUsersIndexRatingCount(),"undefined"!=typeof e.ElementCellSet&&e.ElementCellSet.forEach(function(e){e.setOtherUsersNumericValueTotal(),e.setOtherUsersNumericValueCount()})})}),I()}function t(){return S.UserResourcePoolSet.length>0?S.UserResourcePoolSet[0]:null}function n(){return null===S.backingFields._currentUserResourcePoolRate&&S.setCurrentUserResourcePoolRate(!1),S.backingFields._currentUserResourcePoolRate}function r(){return null!==S.selectedElement().directIncomeField()&&S.selectedElement().elementFieldIndexSet().length>0}function l(){if(!S.UseFixedResourcePoolRate)return!0;for(var e=0;e1)return!0;if(t.elementFieldIndexSet().length>0&&!t.elementFieldIndexSet()[0].UseFixedValue)return!0}return!1}function o(){var e=[];return S.isTemp?e:(e.push(S),S.UserResourcePoolSet.forEach(function(t){e.push(t)}),S.ElementSet.forEach(function(t){e.push(t),t.ElementFieldSet.forEach(function(t){e.push(t),t.UserElementFieldSet.forEach(function(t){e.push(t)})}),t.ElementItemSet.forEach(function(t){e.push(t),t.ElementCellSet.forEach(function(t){e.push(t),t.UserElementCellSet.forEach(function(t){e.push(t)})})})}),e)}function i(e){return"undefined"!=typeof e&&(S.backingFields._isAdded=e),S.backingFields._isAdded}function a(){var e=S.ElementSet.filter(function(e){return e.IsMainElement});return e.length>0?e[0]:null}function u(){var e=S.Name;return e+=S.isEditing?" - Editing":""}function c(){return null===S.backingFields._otherUsersResourcePoolRateCount&&S.setOtherUsersResourcePoolRateCount(),S.backingFields._otherUsersResourcePoolRateCount}function s(){return null===S.backingFields._otherUsersResourcePoolRateTotal&&S.setOtherUsersResourcePoolRateTotal(),S.backingFields._otherUsersResourcePoolRateTotal}function d(){return null===S.backingFields._resourcePoolRate&&S.setResourcePoolRate(!1),S.backingFields._resourcePoolRate}function m(){return null===S.resourcePoolRateCount()?null:0===S.resourcePoolRateCount()?0:S.resourcePoolRateTotal()/S.resourcePoolRateCount()}function f(){return S.UseFixedResourcePoolRate?null!==S.currentUserResourcePool()&&S.currentUserResourcePool().UserId===S.UserId?1:S.otherUsersResourcePoolRateCount():S.otherUsersResourcePoolRateCount()+1}function g(){return null===S.backingFields._resourcePoolRatePercentage&&S.setResourcePoolRatePercentage(!1),S.backingFields._resourcePoolRatePercentage}function E(){return S.UseFixedResourcePoolRate?null!==S.currentUserResourcePool()&&S.currentUserResourcePool().UserId===S.UserId?S.currentUserResourcePoolRate():S.otherUsersResourcePoolRateTotal():S.otherUsersResourcePoolRateTotal()+S.currentUserResourcePoolRate()}function h(e){return"undefined"!=typeof e&&S.backingFields._selectedElement!==e&&(S.backingFields._selectedElement=e),null===S.backingFields._selectedElement&&S.mainElement()&&(S.backingFields._selectedElement=S.mainElement()),S.backingFields._selectedElement}function p(e){e="undefined"==typeof e?!0:e;var t=null!==S.currentUserResourcePool()?S.currentUserResourcePool().ResourcePoolRate:10;S.backingFields._currentUserResourcePoolRate!==t&&(S.backingFields._currentUserResourcePoolRate=t,e&&S.setResourcePoolRate())}function y(){S.backingFields._otherUsersResourcePoolRateCount=S.ResourcePoolRateCount,null!==S.currentUserResourcePool()&&S.backingFields._otherUsersResourcePoolRateCount--}function R(){S.backingFields._otherUsersResourcePoolRateTotal=null!==S.ResourcePoolRateTotal?S.ResourcePoolRateTotal:0,null!==S.currentUserResourcePool()&&(S.backingFields._otherUsersResourcePoolRateTotal-=S.currentUserResourcePool().ResourcePoolRate)}function P(e){e="undefined"==typeof e?!0:e;var t;if(S.UseFixedResourcePoolRate)t=S.resourcePoolRateAverage();else switch(S.RatingMode){case 1:t=S.currentUserResourcePoolRate();break;case 2:t=S.resourcePoolRateAverage()}S.backingFields._resourcePoolRate!==t&&(S.backingFields._resourcePoolRate=t,e&&S.setResourcePoolRatePercentage())}function v(e){e="undefined"==typeof e?!0:e;var t=0===S.resourcePoolRate()?0:S.resourcePoolRate()/100;S.backingFields._resourcePoolRatePercentage!==t&&(S.backingFields._resourcePoolRatePercentage=t,e&&S.ElementSet.forEach(function(e){e.ElementItemSet.forEach(function(e){e.setResourcePoolAmount()})}))}function C(){S.RatingMode=1===S.RatingMode?2:1}function F(){S.isAdded()&&(S.isAdded(!1),S.entityAspect.setAdded(),S.UserResourcePoolSet.forEach(function(e){e.entityAspect.setAdded()}),S.ElementSet.forEach(function(e){e.entityAspect.setAdded(),e.ElementFieldSet.forEach(function(e){e.entityAspect.setAdded(),e.UserElementFieldSet.forEach(function(e){e.entityAspect.setAdded()})}),e.ElementItemSet.forEach(function(e){e.entityAspect.setAdded(),e.ElementCellSet.forEach(function(e){e.entityAspect.setAdded(),e.UserElementCellSet.forEach(function(e){e.entityAspect.setAdded()})})})}))}function I(){var e=!1;S.setCurrentUserResourcePoolRate(),"undefined"!=typeof S.ElementSet&&S.ElementSet.forEach(function(t){t.setElementFieldIndexSet(),"undefined"!=typeof t.ElementFieldSet&&t.ElementFieldSet.forEach(function(t){t.IndexEnabled&&t.setCurrentUserIndexRating(),"undefined"!=typeof t.ElementCellSet&&t.ElementCellSet.forEach(function(t){switch(t.ElementField.DataType){case 1:t.UserElementCellSet.length>0&&(e=t.entityAspect.entityState.isUnchanged(),t.StringValue=t.UserElementCellSet[0].StringValue,e&&t.entityAspect.acceptChanges());break;case 2:case 3:case 4:t.setCurrentUserNumericValue();break;case 11:t.UserElementCellSet.length>0&&(e=t.entityAspect.entityState.isUnchanged(),t.NumericValueTotal=t.UserElementCellSet[0].DecimalValue,e&&t.entityAspect.acceptChanges()),t.setCurrentUserNumericValue();break;case 12:t.ElementItem.setMultiplier(),t.ElementField.IndexEnabled&&t.setNumericValueMultiplied()}})})})}var S=this;S.Id=0,S.UserId=0,S.Name="",S.InitialValue=0,S.ResourcePoolRateTotal=0,S.ResourcePoolRateCount=0,S.RatingCount=0,S.backingFields={_currentUserResourcePoolRate:null,_isAdded:!1,_otherUsersResourcePoolRateTotal:null,_otherUsersResourcePoolRateCount:null,_ratingMode:1,_resourcePoolRate:null,_resourcePoolRatePercentage:null,_selectedElement:null,_useFixedResourcePoolRate:!1},S.isEditing=!1,S.isTemp=!1,S.displayMultiplierFunctions=!0,S._init=e,S.currentUserResourcePool=t,S.currentUserResourcePoolRate=n,S.displayResourcePoolDetails=r,S.displayRatingMode=l,S.getEntities=o,S.isAdded=i,S.mainElement=a,S.name=u,S.otherUsersResourcePoolRateCount=c,S.otherUsersResourcePoolRateTotal=s,S.resourcePoolRate=d,S.resourcePoolRateAverage=m,S.resourcePoolRateCount=f,S.resourcePoolRatePercentage=g,S.resourcePoolRateTotal=E,S.selectedElement=h,S.setCurrentUserResourcePoolRate=p,S.setOtherUsersResourcePoolRateCount=y,S.setOtherUsersResourcePoolRateTotal=R,S.setResourcePoolRate=P,S.setResourcePoolRatePercentage=v,S.toggleRatingMode=C,S.updateAnonymousEntities=F,S.updateCache=I}return e=e.forSource(t),Object.defineProperty(n.prototype,"UseFixedResourcePoolRate",{enumerable:!0,configurable:!0,get:function(){return this.backingFields._useFixedResourcePoolRate},set:function(e){this.backingFields._useFixedResourcePoolRate!==e&&(this.backingFields._useFixedResourcePoolRate=e,this.setResourcePoolRate())}}),Object.defineProperty(n.prototype,"RatingMode",{enumerable:!0,configurable:!0,get:function(){return this.backingFields._ratingMode},set:function(e){this.backingFields._ratingMode!==e&&(this.backingFields._ratingMode=e,this.setResourcePoolRate(),this.ElementSet.forEach(function(e){e.ElementFieldSet.forEach(function(e){e.IndexEnabled&&e.setIndexRating(),e.UseFixedValue||e.ElementCellSet.forEach(function(t){switch(e.DataType){case 2:case 3:case 4:case 11:case 12:t.setNumericValue()}})})}))}}),n}var t="ResourcePool";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e){function n(){function e(){var e=[];return e.push(r),r.ResourcePoolSet.forEach(function(t){var n=t.getEntities();n.forEach(function(t){e.push(t)})}),e}function t(){if("undefined"==typeof r.Claims)throw new Error("Invalid operation: Claims is undefined");for(var e=0;e0}var r=this;r.Id=0,r.Email="",r.EmailConfirmed=!1,r.UserName="",r.FirstName="",r.MiddleName="",r.LastName="",r.PhoneNumber="",r.PhoneNumberConfirmed=!1,r.TwoFactorEnabled=!1,r.AccessFailedCount=0,r.LockoutEnabled=!1,r.LockoutEndDateUtc=null,r.Notes="",r.CreatedOn=new Date,r.ModifiedOn=new Date,r.DeletedOn=null,r.isEditing=!1,r.getEntities=e,r.hasPassword=t,r.isAuthenticated=n}return e=e.forSource(t),n}var t="User";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e){function n(){var e=this;e.UserId=0,e.ElementCellId=0,e.StringValue=null,e.BooleanValue=null,e.IntegerValue=null,e.DateTimeValue=null,e.backingFields={_DecimalValue:null},e.isEditing=!1}return e=e.forSource(t),Object.defineProperty(n.prototype,"DecimalValue",{enumerable:!0,configurable:!0,get:function(){return this.backingFields._DecimalValue},set:function(e){this.backingFields._DecimalValue!==e&&(this.backingFields._DecimalValue=e)}}),n}var t="UserElementCell";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e){function n(){var e=this;e.UserId=0,e.ElementFieldId=0,e.Rating=0,e.isEditing=!1}return e=e.forSource(t),n}var t="UserElementField";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e){function n(){var e=this;e.UserId=0,e.ResourcePoolId=0,e.ResourcePoolRate=0,e.isEditing=!1}return e=e.forSource(t),n}var t="UserResourcePool";angular.module("main").factory(t,["logger",e])}(),function(){"use strict";function e(e,n,r,l){function o(){var t=n.defer();return null!==a?t.resolve(a):e.get(i).success(function(e){a=e,t.resolve(a)}).error(function(e,n,r,l){t.reject({data:e,status:n,headers:r,config:l})}),t.promise}l=l.forSource(t);var i=r+"/api/Application/ApplicationInfo",a=null,u={getApplicationInfo:o};return u}var t="applicationFactory";angular.module("main").factory(t,["$http","$q","serviceAppUrl","logger",e])}(),function(){"use strict";function e(e,n,r,l,o){function i(){S=e.newManager()}function a(){S.clear()}function u(e,t){return"undefined"==typeof t.isEditing&&(t.isEditing=!0),S.createEntity(e,t)}function c(e,t){return u("UserElementCell",t)}function s(e,t){I=t}function d(e){return S.executeQuery(e)}function m(e,t,n){return S.fetchEntityByKey(e,t,n)}function f(e,t){e="undefined"!=typeof e?e:null,t="undefined"!=typeof t?t:null;var n=S.getChanges(),r=[];return n.forEach(function(n){n.isEditing||null!==e&&n.entityType.shortName!==e||null!==t&&n.entityAspect.entityState!==t||r.push(n)}),r}function g(){return f().length}function E(e,t){return S.getEntities(e,t)}function h(){return S.hasChanges()}function p(){if(null===b){var e=n.defer();b=e.promise,S.metadataStore.isEmpty()?S.fetchMetadata().then(function(){e.resolve()},function(t){e.reject(t)}):e.resolve()}return b}function y(){S.rejectChanges()}function R(e){return e="undefined"!=typeof e?e:0,I.isAuthenticated()?(null!==U&&l.cancel(U),0===e?P():U=l(function(){P()},e)):(r.$broadcast("anonymousUserInteracted"),n.reject({}))}function P(){function e(e){return o.logSuccess("Saved "+a+" change(s)"),e}function t(e){if("undefined"!=typeof e.status&&"409"===e.status)o.logError("Save failed!
The record you attempted to edit was modified by another user after you got the original value. The edit operation was canceled.",e,!0);else if("undefined"!=typeof e.entityErrors){var t="Save failed!
";for(var r in e.entityErrors){var l=e.entityErrors[r];t+=l.errorMessage+"
"}o.logError(t,null,!0)}else o.logError("Save failed!",e,!0);return n.reject(e)}function l(){r.$broadcast("saveChangesCompleted")}function i(){var e=[],t=f(null,breeze.EntityState.Modified);return t.forEach(function(e){var t=e.RowVersion;e.RowVersion="",e.RowVersion=t}),e.push(t),e.push(f("UserElementCell",breeze.EntityState.Deleted)),e.push(f("ElementCell",breeze.EntityState.Deleted)),e.push(f("ElementItem",breeze.EntityState.Deleted)),e.push(f("UserElementField",breeze.EntityState.Deleted)),e.push(f("ElementField",breeze.EntityState.Deleted)),e.push(f("Element",breeze.EntityState.Deleted)),e.push(f("UserResourcePool",breeze.EntityState.Deleted)),e.push(f("ResourcePool",breeze.EntityState.Deleted)),e.push(f("ResourcePool",breeze.EntityState.Added)),e.push(f("UserResourcePool",breeze.EntityState.Added)),e.push(f("Element",breeze.EntityState.Added)),e.push(f("ElementField",breeze.EntityState.Added)),e.push(f("UserElementField",breeze.EntityState.Added)),e.push(f("ElementItem",breeze.EntityState.Added)),e.push(f("ElementCell",breeze.EntityState.Added)),e.push(f("UserElementCell",breeze.EntityState.Added)),e}var a=g(),u=null,c=i();return c.forEach(function(e){(null===e||e.length>0)&&(r.$broadcast("saveChangesStart"),u=u?u.then(function(){return S.saveChanges(e)}):S.saveChanges(e))}),null===u&&(u=n.resolve(null)),u.then(e)["catch"](t)["finally"](l)}function v(e,t){return t="undefined"!=typeof t?t:0,I.isAuthenticated()?(null!==U&&l.cancel(U),0===t?C(e):U=l(function(){C(e)},t)):(r.$broadcast("anonymousUserInteracted"),n.reject({}))}function C(e){function t(e){return o.logSuccess("Saved "+u+" change(s)"),e}function l(e){if("undefined"!=typeof e.status&&"409"===e.status)o.logError("Save failed!
The record you attempted to edit was modified by another user after you got the original value. The edit operation was canceled.",e,!0);else if("undefined"!=typeof e.entityErrors){var t="Save failed!
";for(var r in e.entityErrors){var l=e.entityErrors[r];t+=l.errorMessage+"
"}o.logError(t,null,!0)}else o.logError("Save failed!",e,!0);return n.reject(e)}function i(){r.$broadcast("saveChangesCompleted")}function a(e){function t(e,t,n){var r=[];return e.forEach(function(e){e.entityType.shortName===t&&e.entityAspect.entityState===n&&r.push(e)}),r}var n=[],r=[];return e.forEach(function(e){if(e.entityAspect.entityState.isModified()){var t=e.RowVersion;e.RowVersion="",e.RowVersion=t,r.push(e)}}),n.push(r),n.push(t(e,"UserElementCell",breeze.EntityState.Deleted)),n.push(t(e,"ElementCell",breeze.EntityState.Deleted)),n.push(t(e,"ElementItem",breeze.EntityState.Deleted)),n.push(t(e,"UserElementField",breeze.EntityState.Deleted)),n.push(t(e,"ElementField",breeze.EntityState.Deleted)),n.push(t(e,"Element",breeze.EntityState.Deleted)),n.push(t(e,"UserResourcePool",breeze.EntityState.Deleted)),n.push(t(e,"ResourcePool",breeze.EntityState.Deleted)),n.push(t(e,"ResourcePool",breeze.EntityState.Added)),n.push(t(e,"UserResourcePool",breeze.EntityState.Added)),n.push(t(e,"Element",breeze.EntityState.Added)),n.push(t(e,"ElementField",breeze.EntityState.Added)),n.push(t(e,"UserElementField",breeze.EntityState.Added)),n.push(t(e,"ElementItem",breeze.EntityState.Added)),n.push(t(e,"ElementCell",breeze.EntityState.Added)),n.push(t(e,"UserElementCell",breeze.EntityState.Added)),n}var u=e.length,c=null,s=a(e);return s.forEach(function(e){(null===e||e.length>0)&&(r.$broadcast("saveChangesStart"),c=c?c.then(function(){return S.saveChanges(e)}):S.saveChanges(e))}),c.then(t)["catch"](l)["finally"](i)}function F(e,t){var r=n.defer();"undefined"!=typeof e&&null!==e||r.reject("anonymousUser parameter cannot be undefined or null"),"undefined"!=typeof t&&null!==t||r.reject("newUser parameter cannot be undefined or null");var l=[];return e.UserResourcePoolSet.forEach(function(e){var n=[t.Id,e.ResourcePoolId],r=m("UserResourcePool",n);l.push(r)}),e.UserElementFieldSet.forEach(function(e){var n=[t.Id,e.ElementFieldId],r=m("UserElementField",n);l.push(r)}),e.UserElementCellSet.forEach(function(e){var n=[t.Id,e.ElementCellId],r=m("UserElementCell",n);l.push(r)}),n.all(l).then(function(){e.ResourcePoolSet.forEach(function(e){e.User=t});var n=e.UserResourcePoolSet.slice();n.forEach(function(e){var n=t.UserResourcePoolSet.filter(function(t){return t.ResourcePoolId===e.ResourcePoolId});n.length>0?(n[0].ResourcePoolRate=e.ResourcePoolRate,e.entityAspect.rejectChanges()):e.User=t});var l=e.UserElementFieldSet.slice();l.forEach(function(e){var n=t.UserElementFieldSet.filter(function(t){return t.ElementFieldId===e.ElementFieldId});n.length>0?(n[0].Rating=e.Rating,e.entityAspect.rejectChanges()):e.User=t});var o=e.UserElementCellSet.slice();o.forEach(function(e){var n=t.UserElementCellSet.filter(function(t){return t.ElementCellId===e.ElementCellId});n.length>0?(n[0].StringValue=e.StringValue,n[0].BooleanValue=e.BooleanValue,n[0].IntegerValue=e.IntegerValue,n[0].DecimalValue=e.DecimalValue,n[0].DateTimeValue=e.DateTimeValue,e.entityAspect.rejectChanges()):e.User=t}),e.entityAspect.rejectChanges(),r.resolve()}),r.promise}o=o.forSource(t);var I={isAuthenticated:function(){return!1}},S=null,b=null,U=null,_={clear:a,createEntity:u,executeQuery:d,fetchEntityByKey:m,getChanges:f,getChangesCount:g,getEntities:E,hasChanges:h,metadataReady:p,rejectChanges:y,saveChanges:R,saveChangesAlt:v,updateAnonymousChanges:F};return r.$on("ElementField_createUserElementCell",c),r.$on("userFactory_currentUserChanged",s),i(),_}var t="dataContext";angular.module("main").factory(t,["entityManagerFactory","$q","$rootScope","$timeout","logger",e])}(),function(){"use strict";function e(e,n,r,l,o,i,a,u,c,s,d,m,f){function g(){var t=new e.EntityManager(h),d=t.metadataStore;return d.registerEntityTypeCtor("Element",n),d.registerEntityTypeCtor("ElementCell",r),d.registerEntityTypeCtor("ElementField",l),d.registerEntityTypeCtor("ElementItem",o),d.registerEntityTypeCtor("ResourcePool",i),d.registerEntityTypeCtor("User",a),d.registerEntityTypeCtor("UserElementCell",u),d.registerEntityTypeCtor("UserElementField",c),d.registerEntityTypeCtor("UserResourcePool",s),t}f=f.forSource(t);var E=m,h=E+"/odata",p={newManager:g,serviceName:h};return p}var t="entityManagerFactory";angular.module("main").factory(t,["breeze","Element","ElementCell","ElementField","ElementItem","ResourcePool","User","UserElementCell","UserElementField","UserResourcePool","$rootScope","serviceAppUrl","logger",e])}(),function(){"use strict";function e(e,n,r){function l(t,r){function l(e){var t=new a(i,c,e,d);u.history.push(t),u.history.length>u.historyLimit&&u.history.splice(0,u.history.length-u.historyLimit),o.resolve()}var o=n.defer(),i=t.url(),c=r.accessType,s=r.params.resourcePoolId,d="edit"===t.path().substring(t.path().lastIndexOf("/")+1);return"undefined"!=typeof s?e.getResourcePool(s).then(l):l(),o.promise}function o(){return u.history.slice()}function i(e){e="undefined"!=typeof e?e:"";for(var t=u.history.length-2;t>=0;t--){var n=u.history[t];if(""===e||e!==n.accessType)return n}}function a(e,t,n,r){function l(){return null!==o.resourcePool?o.isEdit?"/_system/resourcePool/"+o.resourcePool.Id+"/edit":"/_system/resourcePool/"+o.resourcePool.Id:o.itemUrl}e="undefined"!=typeof e?e:"",t="undefined"!=typeof t?t:"undefined",n="undefined"!=typeof n?n:null,r="undefined"!=typeof r?r:!1;var o=this;o.itemUrl=e,o.accessType=t,o.resourcePool=n,o.isEdit=r,o.url=l}r=r.forSource(t);var u={history:[new a("/")],historyLimit:10},c={createItem:l,getHistory:o,previousItem:i};return c}var t="locationHistory";angular.module("main").factory(t,["resourcePoolFactory","$q","logger",e])}(),function(){"use strict";function e(e){function t(){toastr.options={positionClass:"toast-bottom-right"}}function n(e){return{log:function(t,n,l,o,i){return r(t,n,e,l,o,i)},logError:function(t,n,r,o,i){return l(t,n,e,r,o,i)},logInfo:function(t,n,r,l,i){return o(t,n,e,r,l,i)},logSuccess:function(t,n,r,l,o){return i(t,n,e,r,l,o)},logWarning:function(t,n,r,l,o){return a(t,n,e,r,l,o)}}}function r(e,t,n,r,l,o){return u(e,t,n,r,l,o,"debug")}function l(e,t,n,r,l,o){return u(e,t,n,r,l,o,"error")}function o(e,t,n,r,l,o){return u(e,t,n,r,l,o,"info")}function i(e,t,n,r,l,o){return u(e,t,n,r,l,o,"success")}function a(e,t,n,r,l,o){return u(e,t,n,r,l,o,"warning")}function u(t,n,r,l,o,i,a){l="undefined"==typeof l?!1:l;var u=(new Date).getHours()+":"+(new Date).getMinutes()+":"+(new Date).getSeconds();r=r?"["+r+"] ":"";var c;switch(a){case"debug":c=e.debug;break;case"error":c=e.error;break;case"info":c=e.info;break;case"success":c=e.log;break;case"warning":c=e.warn}c(u,r,t,n);var s=null;if(l)switch(a){case"debug":s=toastr.info(t,o,i);break;case"error":s=toastr.error(t,o,i);break;case"info":s=toastr.info(t,o,i);break;case"success":s=toastr.success(t,o,i);break;case"warning":s=toastr.warning(t,o,i)}return s}t();var c={forSource:n,log:r,logError:l,logInfo:o,logSuccess:i,logWarning:a};return c}angular.module("main").factory("logger",["$log",e])}(),function(){"use strict";function e(e){e.decorator(n,["$delegate","ResourcePool","Element","userFactory","dataContext","$rootScope","logger",t])}function t(e,t,r,l,o,i,a){function u(e){e.entityAspect.entityState.isAdded()&&e.isAdded(!0),e.entityAspect.acceptChanges(),e.isAdded()&&e.entityAspect.setModified(),e.UserResourcePoolSet.forEach(function(e){e.entityAspect.acceptChanges()}),e.ElementSet.forEach(function(e){e.entityAspect.acceptChanges(),e.ElementFieldSet.forEach(function(e){e.entityAspect.acceptChanges(),e.UserElementFieldSet.forEach(function(e){e.entityAspect.acceptChanges()})}),e.ElementItemSet.forEach(function(e){e.entityAspect.acceptChanges(),e.ElementCellSet.forEach(function(e){e.entityAspect.acceptChanges(),e.UserElementCellSet.forEach(function(e){e.entityAspect.acceptChanges()})})})})}function c(e){e.entityAspect.rejectChanges(),e.UserResourcePoolSet.forEach(function(e){e.entityAspect.rejectChanges()}),e.ElementSet.forEach(function(e){e.entityAspect.rejectChanges(),e.ElementFieldSet.forEach(function(e){e.entityAspect.rejectChanges(),e.UserElementFieldSet.forEach(function(e){e.entityAspect.rejectChanges()})}),e.ElementItemSet.forEach(function(e){e.entityAspect.rejectChanges(),e.ElementCellSet.forEach(function(e){e.entityAspect.rejectChanges(),e.UserElementCellSet.forEach(function(e){e.entityAspect.rejectChanges()})})})})}function s(e){}function d(e){return o.createEntity("Element",e)}function m(e){var t=o.createEntity("ElementCell",e);if(6!==t.ElementField.DataType){var n={User:t.ElementField.Element.ResourcePool.User,ElementCell:t};switch(t.ElementField.DataType){case 1:n.StringValue="";break;case 2:n.BooleanValue=!1;break;case 3:n.IntegerValue=0;break;case 4:n.DecimalValue=50;break;case 11:n.DecimalValue=100;break;case 12:n.DecimalValue=0}o.createEntity("UserElementCell",n)}return t}function f(e){return e=o.createEntity("ElementField",e),e.Element.ElementItemSet.forEach(function(t){m({ElementField:e,ElementItem:t})}),e}function g(e){return e=o.createEntity("ElementItem",e),e.Element.ElementFieldSet.forEach(function(t){m({ElementField:t,ElementItem:e})}),e}function E(e){return e="undefined"!=typeof e?e:!1,l.getCurrentUser().then(function(t){var n=10,r=o.createEntity("ResourcePool",{User:t,Name:"New CMRP",InitialValue:100,UseFixedResourcePoolRate:!0});o.createEntity("UserResourcePool",{User:t,ResourcePool:r,ResourcePoolRate:n});var l=d({ResourcePool:r,Name:"New element"});l.IsMainElement=!0;f({Element:l,Name:"Importance",DataType:4,UseFixedValue:!1,IndexEnabled:!0,IndexCalculationType:2,IndexSortType:1,SortOrder:1}),g({Element:l,Name:"New item 1"}),g({Element:l,Name:"New item 2"});return e&&r._init(!0),r})}function h(e){return e="undefined"!=typeof e?e:!1,E().then(function(t){var n=t.mainElement().ElementFieldSet[0];n.Name="Sales Price",n.DataType=11,n.UseFixedValue=!0,n.IndexEnabled=!1,n.IndexCalculationType=0,n.IndexSortType=0;n.ElementCellSet[0],n.ElementCellSet[1],f({Element:t.mainElement(),Name:"Number of Sales",DataType:12,UseFixedValue:!1,SortOrder:2});return e&&t._init(!0),t})}function p(e){return e="undefined"!=typeof e?e:!1,E().then(function(t){var n=t.ElementSet[0];n.Name="Child";var r=n.ElementItemSet[0],l=n.ElementItemSet[1],o=d({ResourcePool:t,Name:"Parent"});o.IsMainElement=!0;var i=(f({Element:o,Name:"Child",DataType:6,SelectedElement:n,UseFixedValue:!0,SortOrder:1}),g({Element:o,Name:"Parent 1"}));i.ElementCellSet[0].SelectedElementItem=r;var a=g({Element:o,Name:"Parent 2"});return a.ElementCellSet[0].SelectedElementItem=l,e&&t._init(!0),t})}function y(e){return e=Number(e),l.getCurrentUser().then(function(t){function n(e){if(0===e.results.length)return null;var t=e.results[0];return c&&t._init(),I.push(t.Id),t}function r(e){var t=e.message||"ResourcePool query failed";a.logError(t,e,!0)}var l=null,i=0>=e,u=!1,c=!1;return i||(u=I.some(function(t){return e===t})),c=!i&&!u,l=t.isAuthenticated()||i?breeze.EntityQuery.from("ResourcePool").expand("UserResourcePoolSet, ElementSet.ElementFieldSet.UserElementFieldSet, ElementSet.ElementItemSet.ElementCellSet.UserElementCellSet").where("Id","eq",e):breeze.EntityQuery.from("ResourcePool").expand("ElementSet.ElementFieldSet, ElementSet.ElementItemSet.ElementCellSet").where("Id","eq",e),l=c?l.using(breeze.FetchStrategy.FromServer):l.using(breeze.FetchStrategy.FromLocalCache),o.executeQuery(l).then(n)["catch"](r)})}function R(e){e.ResourcePool.selectedElement()===e&&e.ResourcePool.selectedElement(null);var t=e.ElementItemSet.slice();t.forEach(function(e){C(e)});var n=e.ElementFieldSet.slice();n.forEach(function(e){v(e)}),e.entityAspect.setDeleted()}function P(e){var t=e.UserElementCellSet.slice();t.forEach(function(e){e.entityAspect.setDeleted()}),e.entityAspect.setDeleted()}function v(e){var t=e.ElementCellSet.slice();t.forEach(function(e){P(e)});var n=e.UserElementFieldSet.slice();n.forEach(function(e){e.entityAspect.setDeleted()}),e.entityAspect.setDeleted()}function C(e){var t=e.ElementCellSet.slice();t.forEach(function(e){P(e)}),e.entityAspect.setDeleted()}function F(e){var t=e.ElementSet.slice();t.forEach(function(e){R(e)});var n=e.UserResourcePoolSet.slice();n.forEach(function(e){e.entityAspect.setDeleted()}),e.entityAspect.setDeleted()}a=a.forSource(n);var I=[];return e.acceptChanges=u,e.cancelResourcePool=c,e.copyResourcePool=s,e.createElement=d,e.createElementField=f,e.createElementItem=g,e.createResourcePoolBasic=E,e.createResourcePoolDirectIncomeAndMultiplier=h,e.createResourcePoolTwoElements=p,e.getResourcePoolExpanded=y,e.removeElement=R,e.removeElementField=v,e.removeElementItem=C,e.removeResourcePool=F,i.$on("userFactory_currentUserChanged",function(){I=[]}),e}var n="resourcePoolFactory";angular.module("main").config(["$provide",e])}(),function(){"use strict";function e(e){e.decorator(n,["$delegate","dataContext","$http","$q","$rootScope","$window","$location","serviceAppUrl","logger",t])}function t(e,t,r,l,o,i,a,u,c){function s(){h().then(function(){C()})}function d(e){return r.post(A,e).success(function(e){for(var t=null,n=0;n<$.Claims.length;n++)if("HasNoPassword"===$.Claims[n].ClaimType){t=n;break}var r=$.Claims.splice(t,1);r[0].entityAspect.setDetached(),U($,e)}).error(P)}function m(e){return r.post(D,e).success(function(e){$.Email=e.Email,$.EmailConfirmed=!1,U($,e)}).error(P)}function f(e){return r.post(T,e).success(function(e){U($,e)}).error(P)}function g(e){return r.post(N,e).success(function(e){$.EmailConfirmed=!0,U($,e)}).error(P)}function E(e,n,o,a,u){u="undefined"==typeof u?!1:u;var c=l.defer(),s="grant_type=password&username="+e+"&password="+n+"&rememberMe="+o+"&tempToken="+("undefined"!=typeof a?a:"");return r.post(B,s,{"Content-Type":"application/x-www-form-urlencoded"}).success(function(e){i.localStorage.setItem("token",angular.toJson(e));var n=$;h(!u).then(function(){u?(C(),$.ResourcePoolSet.forEach(function(e){e.updateAnonymousEntities()}),t.saveChanges().then(function(){c.resolve()})):(C(),t.updateAnonymousChanges(n,$).then(function(){$.ResourcePoolSet.forEach(function(e){e.updateAnonymousEntities()}),t.saveChanges().then(function(){c.resolve()})}))})}).error(function(e,t,n,r){P(e,t,n,r),c.reject(e)}),c.promise}function h(e){function n(e){var n=e.results.length>0?e.results[0]:t.createEntity("User",{isEditing:!1});$=n,o.resolve(n)}function r(e){var t=e.message||"User query failed";throw o.reject(t),new Error(t)}if(e="undefined"!=typeof e?e:!1,null===q||e){var o=l.defer();if(q=o.promise,null===localStorage.getItem("token"))t.metadataReady().then(function(){var e=t.createEntity("User",{isEditing:!1});$=e,o.resolve(e)})["catch"](function(){});else{var i=breeze.EntityQuery.from("Users").expand("Claims").using(breeze.FetchStrategy.FromServer);t.executeQuery(i).then(n)["catch"](r)}}return q}function p(e,n){var r=n.currentUserCell();if(null===r){var l=t.getEntities(["UserElementCell"],[breeze.EntityState.Deleted]),o=l.filter(function(t){return t.UserId===e.Id&&t.ElementCellId===n.Id});o.length>0&&(r=o[0],r.entityAspect.rejectChanges(),r.DecimalValue=12===n.ElementField.DataType?0:50)}return r}function y(e,n){var r=n.currentUserElementField();if(null===r){var l=t.getEntities(["UserElementField"],[breeze.EntityState.Deleted]),o=l.filter(function(t){return t.UserId===e.Id&&t.ElementFieldId===n.Id});o.length>0&&(r=o[0],r.entityAspect.rejectChanges(),r.Rating=50)}return r}function R(e,n){var r=n.currentUserResourcePool();if(null===r){var l=t.getEntities(["UserResourcePool"],[breeze.EntityState.Deleted]),o=l.filter(function(t){return t.UserId===e.Id&&t.ResourcePoolId===n.Id});o.length>0&&(r=o[0],r.entityAspect.rejectChanges(),r.ResourcePoolRate=10)}return r}function P(e,t,n,r){function l(e){o+=e+"
"}var o="";if("undefined"!=typeof e.ModelState)for(var i in e.ModelState){var a=e.ModelState[i];a.forEach(l)}""===o&&"undefined"!=typeof e.Message&&(o=e.Message),""===o&&"undefined"!=typeof e.error_description&&(o=e.error_description),c.logError(o,null,!0)}function v(){return i.localStorage.removeItem("token"),t.clear(),h(!0).then(function(){C()})}function C(){o.$broadcast("userFactory_currentUserChanged",$)}function F(e){return r.post(O,e).success(function(t){return $.Id=t.Id,$.Email=t.Email,$.UserName=t.UserName,$.RowVersion=t.RowVersion,$.entityAspect.acceptChanges(),E(e.email,e.password,!1,!0)}).error(P)}function I(){return r.post(z).error(P)}function S(e){return r.post(j,e).success(function(e){U($,e)}).error(P)}function b(e){return r.post(H,e).error(P)}function U(e,t){e.RowVersion=t.RowVersion}function _(e,t){e.ElementItemSet.forEach(function(e){for(var n,r=0;r100?100:r.DecimalValue+5:r.DecimalValue-5<0?0:r.DecimalValue-5,e.setCurrentUserNumericValue();break;case"reset":null!==r&&(r.entityAspect.setDeleted(),e.setCurrentUserNumericValue())}}function V(e,n){var r=y($,e);switch(n){case"increase":case"decrease":null===r?(r={User:$,ElementField:e,Rating:"increase"===n?55:45,isEditing:!1},t.createEntity("UserElementField",r)):r.Rating="increase"===n?r.Rating+5>100?100:r.Rating+5:r.Rating-5<0?0:r.Rating-5,e.setCurrentUserIndexRating();break;case"reset":null!==r&&(r.entityAspect.setDeleted(),e.setCurrentUserIndexRating())}}function w(e,n){var r=R($,e);switch(n){case"increase":case"decrease":null===r?(r={User:$,ResourcePool:e,ResourcePoolRate:"increase"===n?15:5,isEditing:!1},t.createEntity("UserResourcePool",r)):r.ResourcePoolRate="increase"===n?r.ResourcePoolRate+5>1e3?1e3:r.ResourcePoolRate+5:r.ResourcePoolRate-5<0?0:r.ResourcePoolRate-5,e.setCurrentUserResourcePoolRate();break;case"reset":null!==r&&(r.entityAspect.setDeleted(),e.setCurrentUserResourcePoolRate())}}c=c.forSource(n);var A=u+"/api/Account/AddPassword",D=u+"/api/Account/ChangeEmail",T=u+"/api/Account/ChangePassword",N=u+"/api/Account/ConfirmEmail",$=null,q=null,O=u+"/api/Account/Register",z=u+"/api/Account/ResendConfirmationEmail",j=u+"/api/Account/ResetPassword",H=u+"/api/Account/ResetPasswordRequest",B=u+"/api/Token";return e.addPassword=d,e.changeEmail=m,e.changePassword=f,e.confirmEmail=g,e.getCurrentUser=h,e.getToken=E,e.logout=v,e.register=F,e.resendConfirmationEmail=I,e.resetPassword=S,e.resetPasswordRequest=b,e.updateElementMultiplier=_,e.updateElementCellMultiplier=x,e.updateElementCellNumericValue=M,e.updateElementFieldIndexRating=V,e.updateResourcePoolRate=w,s(),e}var n="userFactory";angular.module("main").config(["$provide",e])}(),function(){"use strict";angular.module("main").filter("enum",["Enums","logger",function(e,t){return function(t,n){return"undefined"==typeof t||"undefined"==typeof n||""===n?null:e.getEnumKey(n,t)}}])}(),function(){"use strict";angular.module("main").filter("numberSymbol",["$filter","logger",function(e,t){return function(t,n){if("undefined"==typeof t)return null;n="undefined"==typeof n?0:n;var r=Number(t);r=n>0?r.toFixed(n):r;var l="";return r/Math.pow(10,12)>=1?(r/=Math.pow(10,12),l="T"):r/Math.pow(10,9)>=1?(r/=Math.pow(10,9),l="B"):r/Math.pow(10,6)>=1?(r/=Math.pow(10,6),l="M"):r/Math.pow(10,3)>=1?(r/=Math.pow(10,3),l="K"):r=r,e("number")(r,n)+l}}])}(),function(){"use strict";angular.module("main").filter("percentage",["$filter",function(e){return function(t,n){return e("number")(100*t,n)+"%"}}])}(),function(){"use strict";function e(e,n){function r(){}function l(){return i}function o(){i=!0,a.user.isEditing=!1,e.saveChanges().then(function(e){n.logSuccess("Your changes have been saved!",null,!0)})["catch"](function(e){"409"===e.status})["finally"](function(){i=!1})}n=n.forSource(t);var i=!1,a=this;a.cancelChanges=r,a.isSaveDisabled=l,a.user=null,a.saveChanges=o,e.getCurrentUser().then(function(e){a.user=e,a.user.isEditing=!0})}var t="AccountEditController";angular.module("main").controller(t,["userFactory","logger",e])}(),function(){"use strict";function e(e,n,r){function l(){e.addPassword(o).success(function(){n.url("/"),r.logSuccess("Your password has been set!",null,!0)})}r=r.forSource(t);var o=this;o.addPassword=l}var t="AddPasswordController";angular.module("main").controller(t,["userFactory","$location","logger",e])}(),function(){"use strict";function e(e,n,r){function l(){if("localhost"===n.host()){var e=new Date,t=e.getFullYear(),r=e.getMonth()+1,l=e.getDate(),o=e.getHours(),a=e.getMinutes(),u=e.getSeconds(),c="local_"+t+r+l+"_"+o+a+u+"@forcrowd.org";i.email=c}}function o(){i.isChangeEmailDisabled=!0,e.changeEmail(i).success(function(){n.url("/_system/account/confirmEmail")})["finally"](function(){i.isChangeEmailDisabled=!1})}r=r.forSource(t);var i=this;i.isChangeEmailDisabled=!1,i.changeEmail=o,l()}var t="ChangeEmailController";angular.module("main").controller(t,["userFactory","$location","logger",e])}(),function(){"use strict";function e(e,n,r){function l(){e.changePassword(o).success(function(){n.url("/"),r.logSuccess("Your password has been changed!",null,!0)})}r=r.forSource(t);var o=this;o.changePassword=l}var t="ChangePasswordController";angular.module("main").controller(t,["userFactory","$location","logger",e])}(),function(){"use strict";function e(e,n,r,l){function o(){e.getCurrentUser().then(function(t){if(a.currentUser=t,a.currentUser.isAuthenticated()){var n=r.search().token;"undefined"!=typeof n&&e.confirmEmail({Token:n})}})}function i(){a.isResendDisabled=!0,e.resendConfirmationEmail().then(function(){l.logSuccess("Confirmation email has been resent to your email address!",null,!0)})["finally"](function(){a.isResendDisabled=!1})}l=l.forSource(t);var a=this;a.currentUser={EmailConfirmed:!1,isAuthenticated:function(){return!1}},a.isResendDisabled=!1,a.resendConfirmationEmail=i,o()}var t="ConfirmEmailController";angular.module("main").controller(t,["userFactory","$rootScope","$location","logger",e])}(),function(){"use strict";function e(e,n,r,l,o){function i(){var e=n.search().error;return"undefined"!=typeof e?void o.logError(e,null,!0):void a()}function a(){function t(){o.logSuccess("You have been logged in!",null,!0),n.url(c())}function r(){o.logError("Invalid token",null,!0)}var l=n.search().tempToken;"undefined"!=typeof l?e.getToken("","",s.rememberMe,l).then(t)["catch"](r):""!==s.email&&""!==s.password&&e.getToken(s.email,s.password,s.rememberMe).then(t)}function u(e){return l+"/api/Account/ExternalLogin?provider="+e+"&clientReturnUrl="+c()}function c(){var e=n.search().clientReturnUrl;return"undefined"!=typeof e?e:r.previousItem().url()}o=o.forSource(t);var s=this;s.email="",s.login=a,s.getExternalLoginUrl=u,s.password="",s.rememberMe=!1,i()}var t="LoginController";angular.module("main").controller(t,["userFactory","$location","locationHistory","serviceAppUrl","logger",e])}(),function(){"use strict";function e(e,n,r,l,o){function i(){if("localhost"===n.host()){var e=new Date,t=e.getFullYear(),r=e.getMonth()+1,l=e.getDate(),o=e.getHours(),i=e.getMinutes(),a=e.getSeconds(),u="local_"+t+r+l+"_"+o+i+a+"@forcrowd.org";c.email=u,c.password="q1w2e3",c.confirmPassword="q1w2e3"}}function a(e){var t=r.previousItem().url();return l+"/api/Account/ExternalLogin?provider="+e+"&clientReturnUrl="+t}function u(){e.register(c).success(function(){o.logSuccess("You have been registered!",null,!0),n.url("/_system/account/confirmEmail")}).error(function(e){"undefined"!=typeof e.error_description&&o.logError(e.error_description,null,!0)})}o=o.forSource(t);var c=this;c.confirmPassword="",c.email="",c.getExternalLoginUrl=a,c.password="",c.register=u,i()}var t="RegisterController";angular.module("main").controller(t,["userFactory","$location","locationHistory","serviceAppUrl","logger",e])}(),function(){"use strict";function e(e,n,r){function l(){var t=i;e.resetPassword(t).success(function(){n.url("/_system/account/login"),r.logSuccess("Your password has been reset!",null,!0)})}function o(){var t=i;e.resetPasswordRequest(t).success(function(){i.viewMode="sent"})}r=r.forSource(t);var i=this;i.email=n.search().email,i.token=n.search().token,i.resetPassword=l,i.resetPasswordRequest=o,i.viewMode="undefined"==typeof n.search().email||"undefined"==typeof n.search().token?"initial":"received"}var t="ResetPasswordController";angular.module("main").controller(t,["userFactory","$location","logger",e])}(),function(){"use strict";function e(e,n){function r(){e.getResourcePoolSet(!1).then(function(e){l.resourcePoolSet=e})}n=n.forSource(t);var l=this;l.resourcePoolSet=[],r()}var t="ResourcePoolListController";angular.module("main").controller(t,["resourcePoolFactory","logger",e])}(),function(){"use strict";function e(e,l,o,i,a,u,c,s){function d(){O.isNew?e.createResourcePoolBasic().then(function(e){O.resourcePool=e,O.resourcePool.isEditing=!0,a.viewTitle=O.resourcePool.Name}):e.getResourcePoolExpanded(O.resourcePoolId).then(function(e){return null===e?void o.url("/_system/content/404"):(O.resourcePool=e,O.resourcePool.isEditing=!0,void(a.viewTitle=O.resourcePool.Name))})}function m(){O.element=e.createElement({ResourcePool:O.resourcePool,Name:"New element",IsMainElement:!1}),O.isElementEdit=!0,O.isElementNew=!0}function f(){var t=O.resourcePool.ElementSet[0],n=t.ElementFieldSet.length+1;O.elementField=e.createElementField({Element:t,Name:"New field",DataType:1,SortOrder:n}),O.isElementFieldEdit=!0,O.isElementFieldNew=!0}function g(){O.elementItem={Element:O.resourcePool.ElementSet[0],Name:"New item"},O.isElementItemEdit=!0,O.isElementItemNew=!0}function E(){O.isElementNew?e.removeElement(O.element):O.element.Name=O.elementMaster.Name,O.isElementEdit=!1,O.element=null,O.elementMaster=null}function h(){O.elementCell.SelectedElementItemId=O.elementCellMaster.SelectedElementItemId,O.elementCell.UserElementCellSet[0].StringValue=O.elementCellMaster.UserElementCellSet[0].StringValue,O.elementCell.UserElementCellSet[0].BooleanValue=O.elementCellMaster.UserElementCellSet[0].BooleanValue,O.elementCell.UserElementCellSet[0].IntegerValue=O.elementCellMaster.UserElementCellSet[0].IntegerValue,O.elementCell.UserElementCellSet[0].DecimalValue=O.elementCellMaster.UserElementCellSet[0].DecimalValue,O.elementCell.UserElementCellSet[0].DateTimeValue=O.elementCellMaster.UserElementCellSet[0].DateTimeValue,O.isElementCellEdit=!1,O.elementCell=null,O.elementCellMaster=null}function p(){O.isElementFieldNew?e.removeElementField(O.elementField):(O.elementField.Name=O.elementFieldMaster.Name,O.elementField.DataType=O.elementFieldMaster.DataType,O.elementField.SelectedElementId=O.elementFieldMaster.SelectedElementId,O.elementField.UseFixedValue=O.elementFieldMaster.UseFixedValue,O.elementField.IndexEnabled=O.elementFieldMaster.IndexEnabled,O.elementField.IndexCalculationType=O.elementFieldMaster.IndexCalculationType,O.elementField.IndexSortType=O.elementFieldMaster.IndexSortType,O.elementField.SortOrder=O.elementFieldMaster.SortOrder),O.isElementFieldEdit=!1,O.elementField=null,O.elementFieldMaster=null}function y(){O.isElementItemNew||(O.elementItem.Name=O.elementItemMaster.Name),O.isElementItemEdit=!1,O.elementItem=null,O.elementItemMaster=null}function R(){e.cancelResourcePool(O.resourcePool);var t=O.isNew?"/_system/resourcePool":"/_system/resourcePool/"+O.resourcePool.Id;o.url(t)}function P(e){O.elementMaster=angular.copy(e),O.element=e,O.isElementEdit=!0,O.isElementNew=!1}function v(e){O.elementCellMaster=angular.copy(e),O.elementCell=e,O.isElementCellEdit=!0}function C(e){O.elementFieldMaster=angular.copy(e),O.elementField=e,O.isElementFieldEdit=!0,O.isElementFieldNew=!1}function F(e){O.elementItemMaster=angular.copy(e),O.elementItem=e,O.isElementItemEdit=!0,O.isElementItemNew=!1}function I(){var e=U(),t=[];return e.forEach(function(e){e.ElementCellSet.forEach(function(e){t.push(e)})}),t}function S(){var e=[];return O.resourcePool.ElementSet.forEach(function(t){t.ElementFieldSet.forEach(function(t){e.push(t)})}),e}function b(){function e(e){return O.ElementFieldDataType[n]===e.ElementFieldDataType}var t={};for(var n in O.ElementFieldDataType)if("DirectIncome"===n||"Multiplier"===n){var r=O.elementField.Element.ElementFieldSet.some(e);r||(t[n]=O.ElementFieldDataType[n])}else"Element"===n?O.elementField.Element.ResourcePool.ElementSet.length>1&&(t[n]=O.ElementFieldDataType[n]):t[n]=O.ElementFieldDataType[n];return t}function U(){var e=[];return O.resourcePool.ElementSet.forEach(function(t){t.ElementItemSet.forEach(function(t){e.push(t)})}),e}function _(){var e=!O.isSaving&&"undefined"!=typeof O.resourcePoolForm&&O.resourcePoolForm.$valid;return e}function x(){var e=u.open({templateUrl:"copyResourcePoolModal.html",controllerAs:"vm",controller:["resourcePoolFactory","$uibModalInstance",n]});e.result.then(function(e){O.resourcePool=e})}function k(){var e=u.open({templateUrl:"removeResourcePoolModal.html",controller:["$scope","$uibModalInstance",t]});e.result.then(function(){A()})}function M(t){e.removeElement(t)}function V(t){e.removeElementField(t)}function w(t){e.removeElementItem(t)}function A(){O.isSaving=!0,e.removeResourcePool(O.resourcePool),l.getCurrentUser().then(function(t){t.isAuthenticated()?e.saveChanges().then(function(){o.url("/_system/resourcePool")})["finally"](function(){O.isSaving=!1}):(o.url("/_system/resourcePool"),O.isSaving=!1)})}function D(){O.isElementEdit=!1,O.element=null,O.elementMaster=null}function T(){O.isElementCellEdit=!1,O.elementCell=null,O.elementCellMaster=null}function N(){O.elementField.DataType!==O.ElementFieldDataType.String&&O.elementField.DataType!==O.ElementFieldDataType.Element||(O.elementField.UseFixedValue=null),O.elementField.DataType===O.ElementFieldDataType.Multiplier&&(O.elementField.UseFixedValue=!1),O.elementField.DataType===O.ElementFieldDataType.DirectIncome&&(O.elementField.UseFixedValue=!0),O.isElementFieldEdit=!1,O.elementField=null,O.elementFieldMaster=null}function $(){O.isElementItemNew&&(O.elementItem=e.createElementItem(O.elementItem)),O.isElementItemEdit=!1,O.elementItem=null,O.elementItemMaster=null}function q(){O.isSaving=!0,O.resourcePool.updateCache(),l.getCurrentUser().then(function(t){O.resourcePool.isEditing=!1,O.resourcePool.UserResourcePoolSet.forEach(function(e){e.isEditing=!1}),O.resourcePool.ElementSet.forEach(function(e){e.isEditing=!1,e.ElementFieldSet.forEach(function(e){e.isEditing=!1,e.UserElementFieldSet.forEach(function(e){e.isEditing=!1})}),e.ElementItemSet.forEach(function(e){e.isEditing=!1,e.ElementCellSet.forEach(function(e){e.isEditing=!1,e.UserElementCellSet.forEach(function(e){e.isEditing=!1})})})}),t.isAuthenticated()?e.saveChanges().then(function(){o.url("/_system/resourcePool/"+O.resourcePool.Id)})["finally"](function(){O.isSaving=!1}):(e.acceptChanges(O.resourcePool),O.isSaving=!1,o.url("/_system/resourcePool/"+O.resourcePool.Id))})}s=s.forSource(r);var O=this;O.addElement=m,O.addElementField=f,O.addElementItem=g,O.cancelElement=E,O.cancelElementCell=h,O.cancelElementField=p,O.cancelElementItem=y,O.cancelResourcePool=R,O.editElement=P,O.editElementCell=v,O.editElementField=C,O.editElementItem=F,O.element=null,O.elementMaster=null,O.elementCell=null,O.elementCellMaster=null,O.elementCellSet=I,O.elementField=null,O.elementFieldMaster=null,O.elementFieldSet=S,O.elementFieldDataTypeFiltered=b,O.elementItem=null,O.elementItemMaster=null,O.elementItemSet=U,O.entityErrors=[],O.isElementEdit=!1,O.isElementNew=!0,O.isElementFieldEdit=!1,O.isElementFieldNew=!0,O.isElementItemEdit=!1,O.isElementItemNew=!0,O.isNew="/_system/resourcePool/new"===o.path(),O.isSaveEnabled=_,O.isSaving=!1,O.openCopyModal=x,O.openRemoveResourcePoolModal=k,O.removeElement=M,O.removeElementField=V,O.removeElementItem=w,O.removeResourcePool=A,O.resourcePool={ElementSet:[]},O.resourcePoolId=i.resourcePoolId,O.saveResourcePool=q,O.saveElement=D,O.saveElementCell=T,O.saveElementField=N,O.saveElementItem=$,O.ElementFieldDataType=c.ElementFieldDataType,O.ElementFieldIndexCalculationType=c.ElementFieldIndexCalculationType,O.ElementFieldIndexSortType=c.ElementFieldIndexSortType,d()}function t(e,t){e.cancel=function(){t.dismiss("cancel")},e.remove=function(){t.close()}}function n(e,t){function n(){e.getResourcePoolSet(!1).then(function(e){o.resourcePoolSet=e})}function r(){t.dismiss("cancel")}function l(e){t.close(e)}var o=this;o.close=r,o.copy=l,o.resourcePoolSet=[],n()}var r="ResourcePoolManageController";angular.module("main").controller(r,["resourcePoolFactory","userFactory","$location","$routeParams","$rootScope","$uibModal","Enums","logger",e])}(),function(){"use strict";function e(e,n,r,l,o){function i(){u.editorConfig.isNew||e.getResourcePool(u.editorConfig.resourcePoolId).then(function(e){return null===e?void n.url("/_system/content/404"):void(l.viewTitle=e.name())})}function a(){var e=n.path().substring(n.path().lastIndexOf("/")+1),t="new"===e,l="edit"===e,o=r.resourcePoolId,i={isNew:t,isEdit:l,resourcePoolId:t?null:o};return i}o=o.forSource(t);var u=this;u.editorConfig=a(),i()}var t="ResourcePoolViewController";angular.module("main").controller(t,["resourcePoolFactory","$location","$routeParams","$rootScope","logger",e])}(),function(){"use strict";function e(e,n,r){function l(){o()}function o(){e.getResourcePoolExpanded(a.allInOneConfig.resourcePoolId).then(function(e){for(var t=0;t0&&e.getResourcePoolExpanded(l).then(function(r){switch(t.name){case"resourcePoolEditor_elementMultiplierIncreased":n.updateElementMultiplier(r.mainElement(),"increase");break;case"resourcePoolEditor_elementMultiplierDecreased":n.updateElementMultiplier(r.mainElement(),"decrease");break;case"resourcePoolEditor_elementMultiplierReset":n.updateElementMultiplier(r.mainElement(),"reset")}e.saveChanges(1500)})}l=l.forSource(t);var i=this;i.existingModelConfig={resourcePoolId:5},i.newModelConfig={resourcePoolId:6},r.$on("resourcePoolEditor_elementMultiplierIncreased",o),r.$on("resourcePoolEditor_elementMultiplierDecreased",o),r.$on("resourcePoolEditor_elementMultiplierReset",o)}var t="TotalCostIndexController";angular.module("main").controller(t,["resourcePoolFactory","userFactory","$scope","logger",e])}(),function(){"use strict";function e(e,n,r,l,o,i){function a(t,r,i){function a(e){t.resourcePool.selectedElement(e),v()}function u(){var e="undefined"==typeof t.config.resourcePoolId?null:Number(t.config.resourcePoolId);n.getCurrentUser().then(function(t){P(t,e)})}function c(e){n.updateElementCellNumericValue(e,"decrease"),o.$broadcast("resourcePoolEditor_elementCellNumericValueDecreased",e),U()}function s(e){n.updateElementMultiplier(e,"decrease"),o.$broadcast("resourcePoolEditor_elementMultiplierDecreased",e),U()}function d(e){n.updateElementCellMultiplier(e,"decrease"),o.$broadcast("resourcePoolEditor_elementCellMultiplierDecreased",element),U()}function m(e){n.updateElementFieldIndexRating(e,"decrease"),U()}function f(){n.updateResourcePoolRate(t.resourcePool,"decrease"),U()}function g(){l.url("/_system/resourcePool/"+t.resourcePoolId+"/edit")}function E(e){o.$broadcast("resourcePoolEditor_elementCellNumericValueIncreased",e),n.updateElementCellNumericValue(e,"increase"),U()}function h(e){n.updateElementMultiplier(e,"increase"),o.$broadcast("resourcePoolEditor_elementMultiplierIncreased",e),U()}function p(e){n.updateElementCellMultiplier(e,"increase"),o.$broadcast("resourcePoolEditor_elementCellMultiplierIncreased",element),U()}function y(e){n.updateElementFieldIndexRating(e,"increase"),U()}function R(){n.updateResourcePoolRate(t.resourcePool,"increase"),U()}function P(n,r){if(t.currentUser!==n||t.resourcePoolId!==r){if(t.currentUser=n,t.resourcePoolId=r,t.errorMessage="",t.chartConfig={credits:{enabled:!1},loading:!0,options:{plotOptions:{column:{allowPointSelect:!0,pointWidth:15},pie:{allowPointSelect:!0,cursor:"pointer",dataLabels:{enabled:!1},showInLegend:!0}},tooltip:{headerFormat:""},xAxis:{categories:[""]},yAxis:{allowDecimals:!1,min:0}},size:{},title:{text:""}},null===t.resourcePoolId)return t.errorMessage="CMRP Id cannot be null",void(t.chartConfig.loading=!1);e.getResourcePoolExpanded(t.resourcePoolId).then(function(e){return null===e?void(t.errorMessage="Invalid CMRP Id"):(t.resourcePool=e,void(null!==t.resourcePool.selectedElement()&&v()))})["catch"](function(){})["finally"](function(){t.chartConfig.loading=!1})}}function v(){var e=t.resourcePool.selectedElement(),n=null;null!==e&&(e.ElementItemSet.length>20||(t.chartConfig.title={text:e.Name},t.chartConfig.series=[],t.displayIndexDetails?(t.chartConfig.title={text:"Indexes"},t.chartConfig.options.chart={type:"pie"},t.chartConfig.options.yAxis.title={text:""},n=[],e.elementFieldIndexSet().forEach(function(e){var t=new w(e);n.push(t)}),t.chartConfig.series=[{data:n}]):(t.chartConfig.title={text:e.Name},e===e.ResourcePool.mainElement()&&(e.totalIncome()>0||null!==e.directIncomeField())?(t.chartConfig.options.chart={type:"column"},t.chartConfig.options.yAxis.title={text:"Total Income"},e.ElementItemSet.forEach(function(e){var n=new V(e);t.chartConfig.series.push(n)})):(t.chartConfig.options.chart={type:"pie"},t.chartConfig.options.yAxis.title={text:""},n=[],e.ElementItemSet.forEach(function(e){e.ElementCellSet.forEach(function(e){if(e.ElementField.IndexEnabled){var t=new A(e);n.push(t)}})}),t.chartConfig.series=[{data:n}]))))}function C(e){n.updateElementCellNumericValue(e,"reset"),o.$broadcast("resourcePoolEditor_elementCellNumericValueReset",element),U()}function F(e){n.updateElementMultiplier(e,"reset"),o.$broadcast("resourcePoolEditor_elementMultiplierReset",e),U()}function I(e){n.updateElementCellMultiplier(e,"reset"),o.$broadcast("resourcePoolEditor_elementCellMultiplierReset",element),U()}function S(e){n.updateElementFieldIndexRating(e,"reset"),U()}function b(){n.updateResourcePoolRate(t.resourcePool,"reset"),U()}function U(){e.saveChanges(1500)["catch"](function(e){"undefined"!=typeof e.status&&"409"===e.status||"undefined"!=typeof e.entityErrors})}function _(){t.isSaving=!0}function x(){t.isSaving=!1}function k(){t.displayIndexDetails=!t.displayIndexDetails,v()}function M(e,n){P(n,t.resourcePoolId)}function V(e){var t=this;Object.defineProperty(t,"name",{enumerable:!0,configurable:!0,get:function(){return e.Name}}),Object.defineProperty(t,"data",{enumerable:!0,configurable:!0,get:function(){return[e.totalIncome()]}})}function w(e){var t=this;Object.defineProperty(t,"name",{enumerable:!0,configurable:!0,get:function(){return e.Name}}),Object.defineProperty(t,"y",{enumerable:!0,configurable:!0,get:function(){var t=e.indexRating();return Number(t.toFixed(2))}})}function A(e){var t=this;Object.defineProperty(t,"name",{enumerable:!0,configurable:!0,get:function(){return e.ElementItem.Name}}),Object.defineProperty(t,"y",{enumerable:!0,configurable:!0,get:function(){var t=e.numericValue();return Number(t.toFixed(2))}})}t.currentUser=null,t.displayIndexDetails=!1,t.editResourcePool=g,t.errorMessage="",t.isSaving=!1,t.resourcePool={Name:"Loading..."},t.resourcePoolId=null,t.changeSelectedElement=a,t.decreaseElementCellNumericValue=c,t.decreaseElementMultiplier=s,t.decreaseElementCellMultiplier=d,t.decreaseIndexRating=m,t.decreaseResourcePoolRate=f,t.increaseElementCellNumericValue=E,t.increaseElementMultiplier=h,t.increaseElementCellMultiplier=p,t.increaseIndexRating=y,t.increaseResourcePoolRate=R,t.resetElementCellNumericValue=C, +t.resetElementMultiplier=F,t.resetElementCellMultiplier=I,t.resetIndexRating=S,t.resetResourcePoolRate=b,t.toggleIndexDetails=k,t.$watch("config",u,!0),t.$on("saveChangesStart",_),t.$on("saveChangesCompleted",x),t.$on("userFactory_currentUserChanged",M)}return i=i.forSource(t),{restrict:"E",templateUrl:"/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.49.0",scope:{config:"="},link:a}}var t="resourcePoolEditor";angular.module("main").directive(t,["resourcePoolFactory","userFactory","Enums","$location","$rootScope","logger",e])}(),function(){"use strict";function e(e,n,r){function l(t){return e.createEntity("ResourcePool",t)}function o(e){e.entityAspect.setDeleted()}function i(){return e.getChanges()}function a(){return e.getChangesCount()}function u(t){function n(e){o=e.results.length;var t=[];return e.results.forEach(function(e){e.isTemp||t.push(e)}),t}function l(e){var t=e.message||"ResourcePool query failed";r.logError(t,e,!0)}var o;t&&e.hasChanges()&&(o=e.getChangesCount(),e.rejectChanges(),r.logWarning("Discarded "+o+" pending change(s)",null));var i=breeze.EntityQuery.from("ResourcePool").expand(["User"]),a=E===g||t;return a?(i=i.using(breeze.FetchStrategy.FromServer),E=new Date):i=i.using(breeze.FetchStrategy.FromLocalCache),e.executeQuery(i).then(n)["catch"](l)}function c(t,n){function l(e){return e.entity}function o(e){var t=e.message||"getResourcePool query failed";r.logError(t,e,!0)}return e.fetchEntityByKey("ResourcePool",t,!n).then(l)["catch"](o)}function s(){return e.hasChanges()}function d(){e.rejectChanges()}function m(t){return e.saveChanges(t)}function f(t,n){return e.saveChangesAlt(t.getEntities(),n)}r=r.forSource(t);var g=new Date(0),E=g,h={createResourcePool:l,deleteResourcePool:o,getChanges:i,getChangesCount:a,getResourcePoolSet:u,getResourcePool:c,hasChanges:s,rejectChanges:d,saveChanges:m,saveChangesAlt:f};return n.$on("userFactory_currentUserChanged",function(){E=g}),h}var t="resourcePoolFactory";angular.module("main").factory(t,["dataContext","$rootScope","logger",e])}(),function(){"use strict";function e(e,n,r){function l(t){return e.createEntity("Users",t)}function o(e){e.entityAspect.setDeleted()}function i(){return e.getChanges()}function a(){return e.getChangesCount()}function u(t){function n(e){return o=e.results.length,e.results}function l(e){var t=e.message||"User query failed";r.logError(t,e,!0)}var o;t&&e.hasChanges()&&(o=e.getChangesCount(),e.rejectChanges(),r.logWarning("Discarded "+o+" pending change(s)",null));var i=breeze.EntityQuery.from("Users"),a=E===g||t;return a?(i=i.using(breeze.FetchStrategy.FromServer),E=new Date):i=i.using(breeze.FetchStrategy.FromLocalCache),e.executeQuery(i).then(n)["catch"](l)}function c(t,n){function l(e){return e.entity}function o(e){var t=e.message||"getUser query failed";r.logError(t,e,!0)}return e.fetchEntityByKey("User",t,!n).then(l)["catch"](o)}function s(){return e.hasChanges()}function d(){e.rejectChanges()}function m(t){return e.saveChanges(t)}function f(t,n){var r=[t];return e.saveChangesAlt(r,n)}r=r.forSource(t);var g=new Date(0),E=g,h={createUser:l,deleteUser:o,getChanges:i,getChangesCount:a,getUserSet:u,getUser:c,hasChanges:s,rejectChanges:d,saveChanges:m,saveChangesAlt:f};return n.$on("userFactory_currentUserChanged",function(){E=g}),h}var t="userFactory";angular.module("main").factory(t,["dataContext","$rootScope","logger",e])}(),function(){"use strict";function e(e,n){n=n.forSource(t)}var t="FairShareIndexSampleController";angular.module("main").controller(t,["userFactory","logger",e])}(),function(){"use strict";function e(e){e=e.forSource(t);var n=this;n.resourcePoolRate_SampleResourcePoolId=12}var t="ResourcePoolRateSampleController";angular.module("main").controller(t,["logger",e])}(); +//# sourceMappingURL=app.min.js.map diff --git a/ngClient/_system/js/app/app.min.js.map b/ngClient/_system/js/app/app.min.js.map new file mode 100644 index 000000000..51baaed90 --- /dev/null +++ b/ngClient/_system/js/app/app.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["main.js","config/authorization.js","config/breeze.js","config/exceptionHandlerExtension.js","config/googleAnalytics.js","config/route.js","entities/Element.js","entities/ElementCell.js","entities/ElementField.js","entities/ElementItem.js","entities/Enums.js","entities/ResourcePool.js","entities/User.js","entities/UserElementCell.js","entities/UserElementField.js","entities/UserResourcePool.js","factories/applicationFactory.js","factories/dataContext.js","factories/entityManagerFactory.js","factories/locationHistory.js","factories/logger.js","factories/resourcePoolFactory.js","factories/userFactory.js","filters/angular-enum.js","filters/angular-numberSymbol.js","filters/angular-percentage.js","controllers/account/AccountEditController.js","controllers/account/AddPasswordController.js","controllers/account/ChangeEmailController.js","controllers/account/ChangePasswordController.js","controllers/account/ConfirmEmailController.js","controllers/account/LoginController.js","controllers/account/RegisterController.js","controllers/account/ResetPasswordController.js","controllers/resourcePool/ResourcePoolListController.js","controllers/resourcePool/ResourcePoolManageController.js","controllers/resourcePool/ResourcePoolViewController.js","controllers/content/AllInOneController.js","controllers/content/BasicsController.js","controllers/content/DefaultController.js","controllers/content/IntroductionController.js","controllers/content/KnowledgeIndexController.js","controllers/content/PriorityIndexController.js","controllers/content/TotalCostIndexController.js","directives/resourcePoolEditor/resourcePoolEditor.js","factories/generated/resourcePoolFactory.js","factories/generated/userFactory.js","controllers/content/obsolete/FairShareIndexSampleController.js","controllers/content/obsolete/ResourcePoolRateSampleController.js"],"names":["mainRun","logger","forSource","angular","module","run","authorizationConfig","$httpProvider","interceptors","push","interceptorId","authorizationRun","$window","oldClient","OData","defaultHttpClient","newClient","request","success","error","headers","token","fromJson","localStorage","getItem","Authorization","access_token","angularInterceptor","$q","config","response","status","when","factory","breezeConfig","breezeProvider","getRoutePrefix_Microsoft_AspNet_WebApi_OData_5_3_x","dataService","parser","document","createElement","href","serviceName","url","parse","prefix","pathname","substr","breeze","initializeAdapterInstance","adapter","getRoutePrefix","extendHandler","$provide","decorator","exceptionHandlerExtension","$delegate","$injector","serviceAppUrl","getSourceMappedStackTrace","exception","getMapForScript","cache","promise","$http","get","then","m","data","match","path","SMConsumer","reject","sourceMap","SourceMapConsumer","stack","all","$","map","split","stackLine","line","col","pos","originalPositionFor","parseInt","column","mangledName","name","location","origin","source","lines","join","factoryId","exceptionUrl","cause","logError","sourceMappedStack","$location","exceptionModel","Message","message","Cause","Url","Stack","post","setTimeout","analyticsConfig","AnalyticsProvider","analyticsTrackingCode","analyticsDomainName","setAccount","setDomainName","ignoreFirstPageLoad","Analytics","routeConfig","$routeProvider","$locationProvider","getContentRouteTitle","params","title","key","substring","getContentTemplateUrl","validateAccess","userFactory","$route","locationHistory","deferred","defer","createItem","current","getCurrentUser","currentUser","accessType","isAuthenticated","resolve","templateUrl","enableDisqus","otherwise","redirectTo","window","history","pushState","html5Mode","enabled","routeRun","$rootScope","routeChangeError","event","previous","eventObj","previousItem","routeChangeSuccess","viewTitle","$on","elementFactory","Element","directIncome","value","self","ElementItemSet","forEach","item","directIncomeField","backingFields","_directIncomeField","setDirectIncomeField","directIncomeIncludingResourcePoolAmount","elementFieldIndexSet","_elementFieldIndexSet","setElementFieldIndexSet","familyTree","_familyTree","setFamilyTree","fullSize","ElementFieldSet","length","getElementFieldIndexSet","element","sortedElementFieldSet","sort","a","b","SortOrder","indexSet","field","IndexEnabled","DataType","SelectedElement","childIndexSet","childIndex","indexRating","_indexRating","setIndexRating","multiplier","multiplierField","_multiplierField","setMultiplierField","parent","_parent","setParent","resourcePoolAmount","result","filter","unshift","updateRelated","index","setIndexRatingPercentage","ParentFieldSet","totalDirectIncome","totalDirectIncomeIncludingResourcePoolAmount","totalIncome","totalIncomeAverage","totalResourcePoolAmount","ResourcePool","mainElement","InitialValue","_totalResourcePoolAmount","setIndexIncome","this","Id","Name","_IsMainElement","isEditing","Object","defineProperty","prototype","enumerable","configurable","set","ResoucePool","ElementSet","IsMainElement","selectedElement","elementCellFactory","ElementCell","aggressiveRating","_aggressiveRating","setAggressiveRating","currentUserCell","UserElementCellSet","currentUserNumericValue","_currentUserNumericValue","setCurrentUserNumericValue","indexIncome","_indexIncome","numericValue","_numericValue","setNumericValue","numericValueAverage","numericValueCount","numericValueTotal","ElementField","UseFixedValue","UserId","otherUsersNumericValueCount","numericValueMultiplied","_numericValueMultiplied","setNumericValueMultiplied","numericValueMultipliedPercentage","_numericValueMultipliedPercentage","setNumericValueMultipliedPercentage","otherUsersNumericValueTotal","_otherUsersNumericValueCount","setOtherUsersNumericValueCount","_otherUsersNumericValueTotal","setOtherUsersNumericValueTotal","passiveRating","_passiveRating","setPassiveRating","rating","_rating","setRating","ratingPercentage","_ratingPercentage","setRatingPercentage","referenceRatingMultiplied","IndexSortType","referenceRatingAllEqualFlag","userCell","BooleanValue","IntegerValue","DecimalValue","NumericValueTotal","SelectedElementItem","totalResourcePoolIncome","ParentCellSet","RatingMode","ElementItem","setDirectIncome","NumericValueCount","userValue","ElementCellSet","IndexCalculationType","StringValue","ElementFieldId","ElementItemId","SelectedElementItemId","elementFieldFactory","currentUserElementField","UserElementFieldSet","currentUserIndexRating","_currentUserIndexRating","setCurrentUserIndexRating","indexRatingAverage","indexRatingCount","indexRatingTotal","otherUsersIndexRatingCount","indexRatingPercentage","_indexRatingPercentage","otherUsersIndexRatingTotal","_otherUsersIndexRatingCount","setOtherUsersIndexRatingCount","_otherUsersIndexRatingTotal","setOtherUsersIndexRatingTotal","_referenceRatingAllEqualFlag","_referenceRatingMultiplied","setReferenceRatingMultiplied","Rating","cell","elementIndexRating","IndexRatingCount","IndexRatingTotal","setReferenceRatingAllEqualFlag","allEqualFlag","flagUpdated","ratingUpdated","ElementId","SelectedElementId","_dataType","_indexEnabled","elementCell","userElementCellSet","slice","userElementCell","entityAspect","setDetached","isNew","User","$broadcast","elementItemFactory","_directIncome","elementCellIndexSet","_elementCellIndexSet","setElementCellIndexSet","getElementCellIndexSet","elementItem","sortedElementCellSet","incomeStatus","averageIncome","Number","toFixed","_multiplier","setMultiplier","_resourcePoolAmount","setResourcePoolAmount","directIncomeCell","setTotalDirectIncome","multiplierCell","setTotalResourcePoolAmount","resourcePoolRatePercentage","_totalDirectIncome","_totalResourcePoolIncome","parentCell","enumsFactory","ElementFieldDataType","String","Boolean","Integer","Decimal","DirectIncome","Multiplier","ElementFieldIndexCalculationType","Aggressive","Passive","ElementFieldIndexSortType","Highest","Lowest","getEnumKey","enumTableKey","tableKey","valueKey","resourcePoolFactory","_init","setComputedFields","userRatings","UserResourcePoolSet","userResourcePool","ResourcePoolRateTotal","ResourcePoolRate","ResourcePoolRateCount","indexOf","elementField","userElementField","IndexRating","RatingCount","setOtherUsersResourcePoolRateTotal","setOtherUsersResourcePoolRateCount","updateCache","currentUserResourcePool","currentUserResourcePoolRate","_currentUserResourcePoolRate","setCurrentUserResourcePoolRate","displayResourcePoolDetails","displayRatingMode","UseFixedResourcePoolRate","elementIndex","getEntities","entities","isTemp","isAdded","_isAdded","otherUsersResourcePoolRateCount","_otherUsersResourcePoolRateCount","otherUsersResourcePoolRateTotal","_otherUsersResourcePoolRateTotal","resourcePoolRate","_resourcePoolRate","setResourcePoolRate","resourcePoolRateAverage","resourcePoolRateCount","resourcePoolRateTotal","_resourcePoolRatePercentage","setResourcePoolRatePercentage","_selectedElement","toggleRatingMode","updateAnonymousEntities","setAdded","isUnchanged","entityState","acceptChanges","_ratingMode","_useFixedResourcePoolRate","displayMultiplierFunctions","ResourcePoolSet","resourcePool","resourcePoolEntities","entity","hasPassword","Claims","Error","i","claim","ClaimType","Email","EmailConfirmed","UserName","FirstName","MiddleName","LastName","PhoneNumber","PhoneNumberConfirmed","TwoFactorEnabled","AccessFailedCount","LockoutEnabled","LockoutEndDateUtc","Notes","CreatedOn","Date","ModifiedOn","DeletedOn","userElementCellFactory","UserElementCell","ElementCellId","DateTimeValue","_DecimalValue","userElementFieldFactory","UserElementField","userResourcePoolFactory","UserResourcePool","ResourcePoolId","applicationFactory","getApplicationInfo","applicationInfo","applicationInfoUrl","dataContext","entityManagerFactory","$timeout","manager","newManager","clear","createEntity","entityType","initialValues","createUserElementCell","currentUserChanged","newUser","executeQuery","query","fetchEntityByKey","typeName","keyValues","checkLocalCacheFirst","getChanges","entityTypeName","changes","change","shortName","getChangesCount","entityTypes","entityStates","hasChanges","metadataReady","metadataReadyPromise","metadataStore","isEmpty","fetchMetadata","rejectChanges","saveChanges","delay","saveTimer","cancel","saveChangesInternal","logSuccess","count","failed","entityErrors","errorMessage","entityError","completed","prepareSaveBatches","batches","modifiedEntities","EntityState","Modified","rowVersion","RowVersion","Deleted","Added","saveBatches","batch","saveChangesAlt","saveChangesInternalAlt","isModified","updateAnonymousChanges","anonymousUser","existingEntityPromises","anonymousResourcePool","userResourcePoolSet","anonymousUserResourcePool","userElementFieldSet","anonymousUserElementField","anonymousUserElementCell","EntityManager","store","registerEntityTypeCtor","serviceRoot","$routeCurrent","createItemInternal","LocationItem","itemUrl","isEdit","historyLimit","splice","resourcePoolId","lastIndexOf","getResourcePool","getHistory","excludeAccessType","$log","configureToastr","toastr","options","positionClass","src","log","d","s","t","o","logInfo","logWarning","showToast","optionsOverride","logIt","toastType","currentDateTime","getHours","getMinutes","getSeconds","write","debug","info","warn","toast","warning","extendFactory","setModified","cancelResourcePool","copyResourcePool","resourcePoolSource","createElementCell","elementCellInitial","createElementField","createElementItem","createResourcePoolBasic","initializeResourcePool","createResourcePoolDirectIncomeAndMultiplier","salesPriceField","createResourcePoolTwoElements","element2","element2Item1","element2Item2","element1","item1","item2","getResourcePoolExpanded","results","fromServer","fetched","isNewResourcePool","fetchedEarlier","some","fetchedId","EntityQuery","from","expand","where","using","FetchStrategy","FromServer","FromLocalCache","removeElement","elementItemSet","removeElementItem","elementFieldSet","removeElementField","setDeleted","removeElementCell","elementCellSet","removeResourcePool","elementSet","broadcastUserChanged","addPassword","addPasswordBindingModel","addPasswordUrl","updatedUser","claimIndex","claims","syncRowVersion","handleErrorResult","changeEmail","changeEmailBindingModel","changeEmailUrl","changePassword","changePasswordBindingModel","changePasswordUrl","confirmEmail","confirmEmailBindingModel","confirmEmailUrl","getToken","email","password","rememberMe","tempToken","isRegister","tokenData","tokenUrl","Content-Type","setItem","toJson","oldUser","resetPromise","user","getCurrentUserPromise","getUserElementCell","deletedUserCells","userCells","deletedUserCell","getUserElementField","userField","deletedUserFields","userFields","deletedUserField","getUserResourcePool","deletedUserResourcePools","userResourcePools","deletedUserResourcePool","addErrorMessage","ModelState","array","error_description","logout","removeItem","register","registerBindingModel","registerUrl","resendConfirmationEmail","resendConfirmationEmailUrl","resetPassword","resetPasswordBindingModel","resetPasswordUrl","resetPasswordRequest","resetPasswordRequestBindingModel","resetPasswordRequestUrl","oldEntity","newEntity","updateElementMultiplier","updateType","cellIndex","updateElementCellMultiplierInternal","updateElementCellMultiplier","updateElementCellNumericValue","updateElementFieldIndexRating","updateResourcePoolRate","Enums","input","$filter","decimals","number","symbol","Math","pow","AccountEditController","cancelChanges","isSaveDisabled","isSaving","vm","controllerId","controller","AddPasswordController","ChangeEmailController","host","now","year","getFullYear","month","getMonth","day","getDate","hour","minute","second","isChangeEmailDisabled","ChangePasswordController","ConfirmEmailController","search","Token","isResendDisabled","LoginController","login","getReturnUrl","failedExternal","getExternalLoginUrl","provider","clientReturnUrl","RegisterController","confirmPassword","returnUrl","ResetPasswordController","viewMode","ResourcePoolListController","getResourcePoolSet","resourcePoolSet","ResourcePoolManageController","$routeParams","$uibModal","addElement","isElementEdit","isElementNew","addElementField","sortOrder","isElementFieldEdit","isElementFieldNew","addElementItem","isElementItemEdit","isElementItemNew","cancelElement","elementMaster","cancelElementCell","elementCellMaster","isElementCellEdit","cancelElementField","elementFieldMaster","cancelElementItem","elementItemMaster","locationPath","editElement","copy","editElementCell","editElementField","editElementItem","elementItems","list","elementFieldDataTypeFiltered","fieldExists","filtered","exists","isSaveEnabled","resourcePoolForm","$valid","openCopyModal","modalInstance","open","controllerAs","CopyResourcePoolModalController","openRemoveResourcePoolModal","RemoveResourcePoolModalController","saveElement","saveElementCell","saveElementField","saveElementItem","saveResourcePool","$scope","$uibModalInstance","dismiss","remove","close","ResourcePoolViewController","init","editorConfig","getEditorConfig","action","AllInOneController","processExistingInteraction","allInOneConfig","elementFieldIndex","elementCellIndex","userInteracted","processNewInteraction","BasicsController","existingModelSampleId","newModelSampleId","getBasicsSample","existingModelConfig","employeeSatisfactionField","fakeUser","floor","random","newModelConfig","updateOppositeResourcePool","oppositeResourcePoolId","DefaultController","disqusShortname","anonymousUserInteracted","anonymousUserWarning","warningText","warningTitle","loggerOptions","extendedTimeOut","timeOut","CurrentVersionText","CurrentVersion","displayFooterIcons","disqusConfig","disqus_identifier","replace","disqus_url","absUrl","toggleBankTransfer","displayBankTransfer","currentDate","disqus_shortname","IntroductionController","upoId","initResourcePool","increaseMultiplier","upoConfig","increaseMultiplierTimeout","KnowledgeIndexController","refreshPage","organizationIndex","oldModelChartConfig","series","newModelChartConfig","timeout","updateAllInOne","allInOneId","knowledgeIndexConfig","text","chart","type","height","plotOptions","allowPointSelect","pointWidth","xAxis","categories","yAxis","allowDecimals","min","size","PriorityIndexController","priorityIndexConfig","TotalCostIndexController","resourcePoolEditor","link","scope","elm","attrs","changeSelectedElement","loadChartData","configChanged","initialize","decreaseElementCellNumericValue","decreaseElementMultiplier","decreaseElementCellMultiplier","decreaseIndexRating","decreaseResourcePoolRate","editResourcePool","increaseElementCellNumericValue","increaseElementMultiplier","increaseElementCellMultiplier","increaseIndexRating","increaseResourcePoolRate","chartConfig","credits","loading","pie","cursor","dataLabels","showInLegend","tooltip","headerFormat","chartData","displayIndexDetails","chartItem","ElementFieldIndexChartItem","ColumnChartItem","PieChartItem","resetElementCellNumericValue","resetElementMultiplier","resetElementCellMultiplier","resetIndexRating","resetResourcePoolRate","saveChangesStart","saveChangesCompleted","toggleIndexDetails","$watch","directiveId","restrict","directive","createResourcePool","deleteResourcePool","forceRefresh","fetchFromServer","fetchedOn","minimumDate","createUser","deleteUser","getUserSet","getUser","userId","FairShareIndexSampleController","ResourcePoolRateSampleController","resourcePoolRate_SampleResourcePoolId"],"mappings":"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","file":"app.min.js","sourcesContent":["/***\r\n * App module: main\r\n *\r\n * Bootstrap the app.\r\n *\r\n ***/\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('main', [\r\n 'ngRoute',\r\n 'ngSanitize',\r\n 'breeze.angular',\r\n 'angular-google-analytics',\r\n 'angularUtils.directives.dirDisqus',\r\n 'ui.bootstrap',\r\n 'highcharts-ng'\r\n ]);\r\n\r\n angular.module('main')\r\n .run(['logger', mainRun]);\r\n\r\n function mainRun(logger) {\r\n logger = logger.forSource('mainRun');\r\n }\r\n\r\n})();\r\n","/*\r\n * Authorization interceptors for angular & OData\r\n */\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .config(['$httpProvider', authorizationConfig]);\r\n\r\n angular.module('main')\r\n .run(['$window', 'logger', authorizationRun]);\r\n\r\n var interceptorId = 'angularInterceptor';\r\n angular.module('main')\r\n .factory(interceptorId, ['$q', '$window', 'logger', angularInterceptor]);\r\n\r\n function authorizationConfig($httpProvider) {\r\n $httpProvider.interceptors.push(interceptorId);\r\n }\r\n\r\n function authorizationRun($window, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource('authorizationRun');\r\n\r\n // OData interceptor\r\n var oldClient = $window.OData.defaultHttpClient;\r\n var newClient = {\r\n request: function (request, success, error) {\r\n request.headers = request.headers || {};\r\n var token = angular.fromJson($window.localStorage.getItem('token'));\r\n request.headers.Authorization = token !== null ? 'Bearer ' + token.access_token : '';\r\n return oldClient.request(request, success, error);\r\n }\r\n };\r\n $window.OData.defaultHttpClient = newClient;\r\n }\r\n\r\n // angular\r\n function angularInterceptor($q, $window, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(interceptorId);\r\n\r\n return {\r\n request: function (config) {\r\n config.headers = config.headers || {};\r\n var token = angular.fromJson($window.localStorage.getItem('token'));\r\n config.headers.Authorization = token !== null ? 'Bearer ' + token.access_token : '';\r\n return config;\r\n },\r\n response: function (response) {\r\n if (response.status === 401) {\r\n // handle the case where the user is not authenticated\r\n }\r\n return response || $q.when(response);\r\n }\r\n };\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .config(['breezeProvider', breezeConfig]);\r\n\r\n function breezeConfig(breezeProvider) {\r\n\r\n breeze.config.initializeAdapterInstance('uriBuilder', 'odata');\r\n\r\n // Use Web API OData to query and save\r\n var adapter = breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);\r\n adapter.getRoutePrefix = getRoutePrefix_Microsoft_AspNet_WebApi_OData_5_3_x;\r\n\r\n // convert between server-side PascalCase and client-side camelCase\r\n // breeze.NamingConvention.camelCase.setAsDefault();\r\n\r\n function getRoutePrefix_Microsoft_AspNet_WebApi_OData_5_3_x(dataService) {\r\n\r\n // Copied from breeze.debug and modified for Web API OData v.5.3.1.\r\n var parser = null;\r\n if (typeof document === 'object') { // browser\r\n parser = document.createElement('a');\r\n parser.href = dataService.serviceName;\r\n } else { // node\r\n parser = url.parse(dataService.serviceName);\r\n }\r\n\r\n // THE CHANGE FOR 5.3.1: Add '/' prefix to pathname\r\n var prefix = parser.pathname;\r\n if (prefix[0] !== '/') {\r\n prefix = '/' + prefix;\r\n } // add leading '/' (only in IE)\r\n if (prefix.substr(-1) !== '/') {\r\n prefix += '/';\r\n } // ensure trailing '/'\r\n\r\n return prefix;\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'exceptionHandlerExtension';\r\n angular.module('main')\r\n .config(['$provide', extendHandler]);\r\n\r\n function extendHandler($provide) {\r\n $provide.decorator('$exceptionHandler', ['$delegate', '$injector', '$window', 'serviceAppUrl', 'logger', exceptionHandlerExtension]);\r\n }\r\n\r\n function exceptionHandlerExtension($delegate, $injector, $window, serviceAppUrl, logger) {\r\n logger = logger.forSource(factoryId);\r\n\r\n var exceptionUrl = serviceAppUrl + '/api/Exception/Record';\r\n\r\n return function (exception, cause) {\r\n\r\n // No need to call the base, will be logged here\r\n // $delegate(exception, cause);\r\n\r\n // Show a generic error to the user\r\n logger.logError('Something went wrong, please try again later!', null, true);\r\n\r\n getSourceMappedStackTrace(exception)\r\n .then(function (sourceMappedStack) {\r\n\r\n // Send the exception to the server\r\n var $location = $injector.get('$location');\r\n var $http = $injector.get('$http');\r\n\r\n var exceptionModel = {\r\n Message: exception.message,\r\n Cause: cause,\r\n Url: $location.url(),\r\n Stack: sourceMappedStack\r\n };\r\n\r\n $http.post(exceptionUrl, exceptionModel);\r\n\r\n // Rethrow the exception\r\n setTimeout(function () {\r\n throw exception;\r\n });\r\n });\r\n };\r\n\r\n function getSourceMappedStackTrace(exception) {\r\n var $q = $injector.get('$q'),\r\n $http = $injector.get('$http'),\r\n SMConsumer = $window.sourceMap.SourceMapConsumer,\r\n cache = {};\r\n\r\n if (exception.stack) { // not all browsers support stack traces\r\n return $q.all($.map(exception.stack.split(/\\n/), function (stackLine) {\r\n var match = stackLine.match(/^(.+)(http.+):(\\d+):(\\d+)/);\r\n if (match) {\r\n var prefix = match[1], url = match[2], line = match[3], col = match[4];\r\n\r\n return getMapForScript(url).then(function (map) {\r\n\r\n var pos = map.originalPositionFor({\r\n line: parseInt(line, 10),\r\n column: parseInt(col, 10)\r\n });\r\n\r\n var mangledName = prefix.match(/\\s*(at)?\\s*(.*?)\\s*(\\(|@)/);\r\n mangledName = (mangledName && mangledName[2]) || '';\r\n\r\n return ' at ' + (pos.name ? pos.name : mangledName) + ' ' +\r\n $window.location.origin + pos.source + ':' + pos.line + ':' +\r\n pos.column;\r\n }, function () {\r\n return stackLine;\r\n });\r\n } else {\r\n return $q.when(stackLine);\r\n }\r\n })).then(function (lines) {\r\n return lines.join('\\n');\r\n });\r\n } else {\r\n return $q.when('');\r\n }\r\n\r\n // Retrieve a SourceMap object for a minified script URL\r\n function getMapForScript(url) {\r\n if (cache[url]) {\r\n return cache[url];\r\n } else {\r\n var promise = $http.get(url).then(function (response) {\r\n var m = response.data.match(/\\/\\/# sourceMappingURL=(.+\\.map)/);\r\n if (m) {\r\n var path = url.match(/^(.+)\\/[^/]+$/);\r\n path = path && path[1];\r\n return $http.get(path + '/' + m[1]).then(function (response) {\r\n return new SMConsumer(response.data);\r\n });\r\n } else {\r\n return $q.reject();\r\n }\r\n });\r\n cache[url] = promise;\r\n return promise;\r\n }\r\n }\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .config(['AnalyticsProvider', 'analyticsTrackingCode', 'analyticsDomainName', analyticsConfig]);\r\n\r\n angular.module('main').run(['Analytics', function (Analytics) { }]);\r\n\r\n function analyticsConfig(AnalyticsProvider, analyticsTrackingCode, analyticsDomainName) {\r\n AnalyticsProvider.setAccount(analyticsTrackingCode)\r\n .setDomainName(analyticsDomainName)\r\n .ignoreFirstPageLoad(true);\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .config(['$routeProvider', '$locationProvider', routeConfig]);\r\n\r\n angular.module('main')\r\n .run(['$rootScope', '$location', 'locationHistory', 'logger', routeRun]);\r\n\r\n function routeConfig($routeProvider, $locationProvider) {\r\n\r\n // Routes\r\n $routeProvider\r\n\r\n /* Content */\r\n .when('/', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/default.aspx', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n // Different than normal content, enableDisqus: false\r\n .when('/_system/content/404/', { title: function () { return '404'; }, templateUrl: '/_system/views/content/404.html?v=0.49.0', enableDisqus: false, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/content/:key/', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n\r\n /* CMRP List + View + Edit pages */\r\n .when('/_system/resourcePool', { title: function () { return 'CMRP List'; }, templateUrl: '/_system/views/resourcePool/resourcePoolList.html?v=0.49.1', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/resourcePool/new', { title: function () { return 'New CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/resourcePool/:resourcePoolId/edit', { title: function () { return 'Edit CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/resourcePool/:resourcePoolId', { title: function () { return 'View CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolView.html?v=0.49.0', enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n\r\n /* Account */\r\n .when('/_system/account/accountEdit', { title: function () { return 'Account Edit'; }, templateUrl: '/_system/views/account/accountEdit.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/account/addPassword', { title: function () { return 'Add Password'; }, templateUrl: '/_system/views/account/addPassword.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/account/changeEmail', { title: function () { return 'Change Email'; }, templateUrl: '/_system/views/account/changeEmail.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/account/changePassword', { title: function () { return 'Change Password'; }, templateUrl: '/_system/views/account/changePassword.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/account/confirmEmail', { title: function () { return 'Confirm Email'; }, templateUrl: '/_system/views/account/confirmEmail.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/account/login', { title: function () { return 'Login'; }, templateUrl: '/_system/views/account/login.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/account/register', { title: function () { return 'Register'; }, templateUrl: '/_system/views/account/register.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n .when('/_system/account/resetPassword', { title: function () { return 'Reset Password'; }, templateUrl: '/_system/views/account/resetPassword.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } })\r\n\r\n /* Otherwise */\r\n .otherwise({ redirectTo: '/_system/content/404' }); // TODO Is it possible to return Response.StatusCode = 404; ?\r\n\r\n // Html5Mode is on, if supported (# will not be used)\r\n if (window.history && window.history.pushState) {\r\n $locationProvider.html5Mode({ enabled: true });\r\n }\r\n\r\n function getManageRouteTitle(params) {\r\n\r\n var entity = params.entity[0].toUpperCase() + params.entity.substring(1);\r\n\r\n var action = typeof params.action !== 'undefined' ?\r\n params.action[0].toUpperCase() + params.action.substring(1) :\r\n 'List';\r\n\r\n return entity + ' ' + action;\r\n }\r\n\r\n function getContentRouteTitle(params) {\r\n\r\n var title = typeof params.key !== 'undefined' ?\r\n params.key[0] + params.key.substring(1) :\r\n 'Home'; // Default view\r\n\r\n return title;\r\n }\r\n\r\n function getContentTemplateUrl(params) {\r\n\r\n var key = typeof params.key !== 'undefined' ?\r\n params.key :\r\n 'home'; // Default view\r\n\r\n return '/_system/views/content/' + key + '.html?v=0.49.0';\r\n }\r\n\r\n function validateAccess(userFactory, $route, $q, locationHistory, $location, logger) {\r\n\r\n logger = logger.forSource('validateAccess');\r\n\r\n var deferred = $q.defer();\r\n\r\n locationHistory.createItem($location, $route.current)\r\n .then(function () {\r\n userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n if ($route.current.accessType !== 'undefined') {\r\n\r\n // Invalid access cases\r\n if (($route.current.accessType === 'unauthenticatedRequired' && currentUser.isAuthenticated()) ||\r\n ($route.current.accessType === 'authenticatedRequired' && !currentUser.isAuthenticated())) {\r\n deferred.reject({ accessType: $route.current.accessType });\r\n }\r\n }\r\n\r\n deferred.resolve();\r\n })\r\n .catch(function () {\r\n deferred.reject(); // TODO Handle?\r\n });\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n\r\n function routeRun($rootScope, $location, locationHistory, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource('routeRun');\r\n\r\n $rootScope.$on('$routeChangeSuccess', routeChangeSuccess);\r\n $rootScope.$on('$routeChangeError', routeChangeError);\r\n\r\n // Navigate to correct page in 'Invalid access' cases\r\n function routeChangeError(event, current, previous, eventObj) {\r\n if (eventObj.accessType === 'unauthenticatedRequired') {\r\n $location.url(locationHistory.previousItem('unauthenticatedRequired').url());\r\n } else if (eventObj.accessType === 'authenticatedRequired') {\r\n $location.url('/_system/account/login?error=To be able to continue, please login first');\r\n }\r\n }\r\n\r\n function routeChangeSuccess(event, current, previous) {\r\n\r\n // View title\r\n var viewTitle = '';\r\n if (typeof current.title !== 'undefined') {\r\n // TODO Is this correct?\r\n viewTitle = current.title(current.params);\r\n }\r\n $rootScope.viewTitle = viewTitle;\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'Element';\r\n angular.module('main')\r\n .factory(factoryId, ['$rootScope', 'logger', elementFactory]);\r\n\r\n function elementFactory($rootScope, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Server-side\r\n Object.defineProperty(Element.prototype, 'IsMainElement', {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () { return this.backingFields._IsMainElement; },\r\n set: function (value) {\r\n\r\n var self = this;\r\n\r\n if (self.backingFields._IsMainElement !== value) {\r\n self.backingFields._IsMainElement = value;\r\n\r\n // TODO When this prop set in constructor, ResourcePool is null, in such case, ignore\r\n // However, it would be better to always have a ResourcePool? / SH - 29 Nov. '15\r\n if (typeof self.ResoucePool === 'undefined') {\r\n return;\r\n }\r\n\r\n // Main element check: If there is another element that its IsMainElement flag is true, make it false\r\n if (value) {\r\n self.ResourcePool.ElementSet.forEach(function (element) {\r\n if (element !== self && element.IsMainElement) {\r\n element.IsMainElement = false;\r\n }\r\n });\r\n\r\n // Update selectedElement of resourcePool\r\n self.ResourcePool.selectedElement(self);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Return\r\n return Element;\r\n\r\n function Element() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.Id = 0;\r\n self.Name = '';\r\n // TODO breezejs - Cannot assign a navigation property in an entity ctor\r\n //self.ResourcePool = null;\r\n //self.ElementFieldSet = [];\r\n //self.ElementItemSet = [];\r\n //self.ParentFieldSet = [];\r\n\r\n // Local variables\r\n self.backingFields = {\r\n // Server-side\r\n _IsMainElement: false,\r\n\r\n // Client-side\r\n _parent: null,\r\n _familyTree: null,\r\n _elementFieldIndexSet: null,\r\n _indexRating: null,\r\n _directIncomeField: null,\r\n _multiplierField: null,\r\n _totalResourcePoolAmount: null\r\n };\r\n self.isEditing = false;\r\n\r\n // Functions\r\n self.directIncome = directIncome;\r\n self.directIncomeField = directIncomeField;\r\n self.directIncomeIncludingResourcePoolAmount = directIncomeIncludingResourcePoolAmount;\r\n self.elementFieldIndexSet = elementFieldIndexSet;\r\n self.familyTree = familyTree;\r\n self.fullSize = fullSize;\r\n self.indexRating = indexRating;\r\n self.multiplier = multiplier;\r\n self.multiplierField = multiplierField;\r\n self.parent = parent;\r\n self.resourcePoolAmount = resourcePoolAmount;\r\n self.setDirectIncomeField = setDirectIncomeField;\r\n self.setElementFieldIndexSet = setElementFieldIndexSet;\r\n self.setFamilyTree = setFamilyTree;\r\n self.setIndexRating = setIndexRating;\r\n self.setMultiplierField = setMultiplierField;\r\n self.setParent = setParent;\r\n self.totalDirectIncome = totalDirectIncome;\r\n self.totalDirectIncomeIncludingResourcePoolAmount = totalDirectIncomeIncludingResourcePoolAmount;\r\n self.totalIncome = totalIncome;\r\n self.totalIncomeAverage = totalIncomeAverage;\r\n self.totalResourcePoolAmount = totalResourcePoolAmount;\r\n\r\n /*** Implementations ***/\r\n\r\n function directIncome() {\r\n\r\n // TODO Check totalIncome notes\r\n\r\n var value = 0;\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.directIncome();\r\n });\r\n\r\n return value;\r\n }\r\n\r\n function directIncomeField() {\r\n\r\n // TODO In case of add / remove fields?\r\n if (self.backingFields._directIncomeField === null) {\r\n self.setDirectIncomeField();\r\n }\r\n\r\n return self.backingFields._directIncomeField;\r\n }\r\n\r\n function directIncomeIncludingResourcePoolAmount() {\r\n\r\n // TODO Check totalIncome notes\r\n\r\n var value = 0;\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.directIncomeIncludingResourcePoolAmount();\r\n });\r\n\r\n return value;\r\n }\r\n\r\n function elementFieldIndexSet() {\r\n if (self.backingFields._elementFieldIndexSet === null) {\r\n self.setElementFieldIndexSet();\r\n }\r\n return self.backingFields._elementFieldIndexSet;\r\n }\r\n\r\n function familyTree() {\r\n\r\n // TODO In case of add / remove elements?\r\n if (self.backingFields._familyTree === null) {\r\n self.setFamilyTree();\r\n }\r\n\r\n return self.backingFields._familyTree;\r\n }\r\n\r\n // UI related: Determines whether the chart & element details will use full row (col-md-4 vs col-md-12 etc.)\r\n // TODO Obsolete for the moment!\r\n function fullSize() {\r\n return (self.ElementFieldSet.length > 4) || self.elementFieldIndexSet().length > 2;\r\n }\r\n\r\n function getElementFieldIndexSet(element) {\r\n\r\n var sortedElementFieldSet = element.ElementFieldSet.sort(function (a, b) { return a.SortOrder - b.SortOrder; });\r\n var indexSet = [];\r\n\r\n // Validate\r\n sortedElementFieldSet.forEach(function (field) {\r\n if (field.IndexEnabled) {\r\n indexSet.push(field);\r\n }\r\n\r\n if (field.DataType === 6 && field.SelectedElement !== null) {\r\n var childIndexSet = getElementFieldIndexSet(field.SelectedElement);\r\n\r\n childIndexSet.forEach(function (childIndex) {\r\n indexSet.push(childIndex);\r\n });\r\n }\r\n });\r\n\r\n return indexSet;\r\n }\r\n\r\n function indexRating() {\r\n\r\n if (self.backingFields._indexRating === null) {\r\n self.setIndexRating(false);\r\n }\r\n\r\n return self.backingFields._indexRating;\r\n }\r\n\r\n function multiplier() {\r\n\r\n // TODO Check totalIncome notes\r\n\r\n var value = 0;\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.multiplier();\r\n });\r\n\r\n return value;\r\n }\r\n\r\n function multiplierField() {\r\n\r\n // TODO In case of add / remove field?\r\n if (self.backingFields._multiplierField !== null) {\r\n self.setMultiplierField();\r\n }\r\n\r\n return self.backingFields._multiplierField;\r\n }\r\n\r\n function parent() {\r\n\r\n // TODO In case of add / remove elements?\r\n if (self.backingFields._parent === null) {\r\n self.setParent();\r\n }\r\n\r\n return self.backingFields._parent;\r\n }\r\n\r\n function resourcePoolAmount() {\r\n\r\n // TODO Check totalIncome notes\r\n\r\n var value = 0;\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.resourcePoolAmount();\r\n });\r\n\r\n return value;\r\n }\r\n\r\n function setDirectIncomeField() {\r\n var result = self.ElementFieldSet.filter(function (field) {\r\n return field.DataType === 11;\r\n });\r\n\r\n if (result.length > 0) {\r\n self.backingFields._directIncomeField = result[0];\r\n }\r\n }\r\n\r\n function setElementFieldIndexSet() {\r\n self.backingFields._elementFieldIndexSet = getElementFieldIndexSet(self);\r\n }\r\n\r\n function setFamilyTree() {\r\n\r\n self.backingFields._familyTree = [];\r\n\r\n var element = self;\r\n while (element !== null) {\r\n self.backingFields._familyTree.unshift(element);\r\n element = element.parent();\r\n }\r\n\r\n // TODO At the moment it's only upwards, later include children?\r\n }\r\n\r\n function setIndexRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var indexSet = self.elementFieldIndexSet();\r\n\r\n var value = 0;\r\n indexSet.forEach(function (index) {\r\n value += index.indexRating();\r\n });\r\n\r\n if (self.backingFields._indexRating !== value) {\r\n self.backingFields._indexRating = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.elementFieldIndexSet().forEach(function (index) {\r\n index.setIndexRatingPercentage();\r\n });\r\n }\r\n }\r\n }\r\n\r\n function setMultiplierField() {\r\n var result = self.ElementFieldSet.filter(function (field) {\r\n return field.DataType === 12;\r\n });\r\n\r\n if (result.length > 0) {\r\n self.backingFields._multiplierField = result[0];\r\n }\r\n }\r\n\r\n function setParent() {\r\n if (self.ParentFieldSet.length > 0) {\r\n self.backingFields._parent = self.ParentFieldSet[0].Element;\r\n }\r\n }\r\n\r\n function totalDirectIncome() {\r\n\r\n // TODO Check totalIncome notes\r\n\r\n var value = 0;\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.totalDirectIncome();\r\n });\r\n\r\n return value;\r\n }\r\n\r\n function totalDirectIncomeIncludingResourcePoolAmount() {\r\n\r\n // TODO Check totalIncome notes\r\n\r\n var value = 0;\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.totalDirectIncomeIncludingResourcePoolAmount();\r\n });\r\n\r\n return value;\r\n }\r\n\r\n function totalIncome() {\r\n\r\n // TODO If elementItems could set their parent element's totalIncome when their totalIncome changes, it wouldn't be necessary to sum this result everytime?\r\n\r\n var value = 0;\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.totalIncome();\r\n });\r\n\r\n return value;\r\n }\r\n\r\n function totalIncomeAverage() {\r\n\r\n // Validate\r\n if (self.ElementItemSet.length === 0) {\r\n return 0;\r\n }\r\n\r\n return self.totalIncome() / self.ElementItemSet.length;\r\n }\r\n\r\n // TODO This is out of pattern!\r\n function totalResourcePoolAmount() {\r\n\r\n // TODO Check totalIncome notes\r\n\r\n var value;\r\n\r\n if (self === self.ResourcePool.mainElement()) {\r\n\r\n value = self.ResourcePool.InitialValue;\r\n\r\n self.ElementItemSet.forEach(function (item) {\r\n value += item.totalResourcePoolAmount();\r\n });\r\n\r\n } else {\r\n if (self.ResourcePool.mainElement() !== null) {\r\n value = self.ResourcePool.mainElement().totalResourcePoolAmount();\r\n }\r\n }\r\n\r\n //logger.log('TRPA-A ' + value.toFixed(2));\r\n\r\n if (self.backingFields._totalResourcePoolAmount !== value) {\r\n self.backingFields._totalResourcePoolAmount = value;\r\n\r\n //logger.log('TRPA-B ' + value.toFixed(2));\r\n\r\n self.elementFieldIndexSet().forEach(function (field) {\r\n // TODO How about this check?\r\n // if (field.DataType === 11) { - \r\n field.setIndexIncome();\r\n // }\r\n });\r\n }\r\n\r\n return value;\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'ElementCell';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', elementCellFactory]);\r\n\r\n function elementCellFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Return\r\n return ElementCell;\r\n\r\n function ElementCell() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.Id = 0;\r\n self.ElementFieldId = 0;\r\n self.ElementItemId = 0;\r\n self.StringValue = ''; // Computed value - Used in: resourcePoolEditor.html\r\n self.NumericValueTotal = 0; // Computed value - Used in: setOtherUsersNumericValueTotal, setCurrentUserNumericValue\r\n self.NumericValueCount = 0; // Computed value - Used in: setOtherUsersNumericValueCount\r\n self.SelectedElementItemId = null;\r\n // TODO breezejs - Cannot assign a navigation property in an entity ctor\r\n //self.ElementField = null;\r\n //self.ElementItem = null;\r\n //self.SelectedElementItem = null;\r\n //self.UserElementCellSet = [];\r\n\r\n // Local variables\r\n self.backingFields = {\r\n _currentUserNumericValue: null,\r\n _otherUsersNumericValueTotal: null,\r\n _otherUsersNumericValueCount: null,\r\n _numericValue: null,\r\n _numericValueMultiplied: null,\r\n _numericValueMultipliedPercentage: null,\r\n _passiveRating: null,\r\n _aggressiveRating: null,\r\n _rating: null,\r\n _ratingPercentage: null,\r\n _indexIncome: null\r\n };\r\n self.isEditing = false;\r\n\r\n // Functions\r\n self.aggressiveRating = aggressiveRating;\r\n self.currentUserCell = currentUserCell;\r\n self.currentUserNumericValue = currentUserNumericValue;\r\n self.indexIncome = indexIncome;\r\n self.numericValue = numericValue;\r\n self.numericValueAverage = numericValueAverage;\r\n self.numericValueCount = numericValueCount;\r\n self.numericValueMultiplied = numericValueMultiplied;\r\n self.numericValueMultipliedPercentage = numericValueMultipliedPercentage;\r\n self.numericValueTotal = numericValueTotal;\r\n self.otherUsersNumericValueCount = otherUsersNumericValueCount;\r\n self.otherUsersNumericValueTotal = otherUsersNumericValueTotal;\r\n self.passiveRating = passiveRating;\r\n self.rating = rating;\r\n self.ratingPercentage = ratingPercentage;\r\n self.setAggressiveRating = setAggressiveRating;\r\n self.setCurrentUserNumericValue = setCurrentUserNumericValue;\r\n self.setIndexIncome = setIndexIncome;\r\n self.setNumericValue = setNumericValue;\r\n self.setNumericValueMultiplied = setNumericValueMultiplied;\r\n self.setNumericValueMultipliedPercentage = setNumericValueMultipliedPercentage;\r\n self.setOtherUsersNumericValueCount = setOtherUsersNumericValueCount;\r\n self.setOtherUsersNumericValueTotal = setOtherUsersNumericValueTotal;\r\n self.setPassiveRating = setPassiveRating;\r\n self.setRating = setRating;\r\n self.setRatingPercentage = setRatingPercentage;\r\n self.value = value;\r\n\r\n /*** Implementations ***/\r\n\r\n function aggressiveRating() {\r\n\r\n if (self.backingFields._aggressiveRating === null) {\r\n self.setAggressiveRating(false);\r\n }\r\n\r\n return self.backingFields._aggressiveRating;\r\n }\r\n\r\n function currentUserCell() {\r\n return self.UserElementCellSet.length > 0 ?\r\n self.UserElementCellSet[0] :\r\n null;\r\n }\r\n\r\n function currentUserNumericValue() {\r\n\r\n if (self.backingFields._currentUserNumericValue === null) {\r\n self.setCurrentUserNumericValue(false);\r\n }\r\n\r\n return self.backingFields._currentUserNumericValue;\r\n }\r\n\r\n // TODO This is out of pattern!\r\n function indexIncome() {\r\n\r\n //if (self.backingFields._indexIncome === null) {\r\n self.setIndexIncome();\r\n //}\r\n\r\n return self.backingFields._indexIncome;\r\n }\r\n\r\n function numericValue() {\r\n\r\n if (self.backingFields._numericValue === null) {\r\n self.setNumericValue(false);\r\n }\r\n\r\n return self.backingFields._numericValue;\r\n }\r\n\r\n function numericValueAverage() {\r\n\r\n if (self.numericValueCount() === null) {\r\n return null;\r\n }\r\n\r\n return self.numericValueCount() === 0 ?\r\n 0 :\r\n self.numericValueTotal() / self.numericValueCount();\r\n }\r\n\r\n function numericValueCount() {\r\n return self.ElementField.UseFixedValue ?\r\n self.currentUserCell() !== null && self.currentUserCell().UserId === self.ElementField.Element.ResourcePool.UserId ? // If it belongs to current user\r\n 1 :\r\n self.otherUsersNumericValueCount() :\r\n self.otherUsersNumericValueCount() + 1; // There is always default value, increase count by 1\r\n }\r\n\r\n function numericValueMultiplied() {\r\n\r\n if (self.backingFields._numericValueMultiplied === null) {\r\n self.setNumericValueMultiplied(false);\r\n }\r\n\r\n return self.backingFields._numericValueMultiplied;\r\n }\r\n\r\n function numericValueMultipliedPercentage() {\r\n if (self.backingFields._numericValueMultipliedPercentage === null) {\r\n self.setNumericValueMultipliedPercentage(false);\r\n }\r\n\r\n return self.backingFields._numericValueMultipliedPercentage;\r\n }\r\n\r\n function numericValueTotal() {\r\n return self.ElementField.UseFixedValue ?\r\n self.currentUserCell() !== null && self.currentUserCell().UserId === self.ElementField.Element.ResourcePool.UserId ? // If it belongs to current user\r\n self.currentUserNumericValue() :\r\n self.otherUsersNumericValueTotal() :\r\n self.otherUsersNumericValueTotal() + self.currentUserNumericValue();\r\n }\r\n\r\n // TODO Since this is a fixed value based on NumericValueCount & current user's rate,\r\n // it could be calculated on server, check it later again / SH - 03 Aug. '15\r\n function otherUsersNumericValueCount() {\r\n\r\n // Set other users' value on the initial call\r\n if (self.backingFields._otherUsersNumericValueCount === null) {\r\n self.setOtherUsersNumericValueCount();\r\n }\r\n\r\n return self.backingFields._otherUsersNumericValueCount;\r\n }\r\n\r\n // TODO Since this is a fixed value based on NumericValueTotal & current user's rate,\r\n // it could be calculated on server, check it later again / SH - 03 Aug. '15\r\n function otherUsersNumericValueTotal() {\r\n\r\n // Set other users' value on the initial call\r\n if (self.backingFields._otherUsersNumericValueTotal === null) {\r\n self.setOtherUsersNumericValueTotal();\r\n }\r\n\r\n return self.backingFields._otherUsersNumericValueTotal;\r\n }\r\n\r\n function passiveRating() {\r\n if (self.backingFields._passiveRating === null) {\r\n self.setPassiveRating(false);\r\n }\r\n\r\n return self.backingFields._passiveRating;\r\n }\r\n\r\n function rating() {\r\n\r\n if (self.backingFields._rating === null) {\r\n self.setRating(false);\r\n }\r\n\r\n return self.backingFields._rating;\r\n }\r\n\r\n function ratingPercentage() {\r\n\r\n if (self.backingFields._ratingPercentage === null) {\r\n self.setRatingPercentage(false);\r\n }\r\n\r\n return self.backingFields._ratingPercentage;\r\n }\r\n\r\n // TODO Currently updateRelated is always 'false'?\r\n function setAggressiveRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0; // Default value?\r\n\r\n if (self.ElementField.IndexEnabled && self.ElementField.referenceRatingMultiplied() > 0) {\r\n switch (self.ElementField.IndexSortType) {\r\n case 1: { // HighestToLowest (High rating is better)\r\n value = (1 - self.numericValueMultipliedPercentage()) / self.ElementField.referenceRatingMultiplied();\r\n break;\r\n }\r\n case 2: { // LowestToHighest (Low rating is better)\r\n value = self.numericValueMultiplied() / self.ElementField.referenceRatingMultiplied();\r\n break;\r\n }\r\n }\r\n\r\n if (!self.ElementField.referenceRatingAllEqualFlag()) {\r\n value = 1 - value;\r\n }\r\n }\r\n\r\n if (self.backingFields._aggressiveRating !== value) {\r\n self.backingFields._aggressiveRating = value;\r\n\r\n // Update related values\r\n if (updateRelated) {\r\n // TODO ?\r\n }\r\n }\r\n }\r\n\r\n function setCurrentUserNumericValue(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value;\r\n var userCell = self.currentUserCell();\r\n\r\n switch (self.ElementField.DataType) {\r\n case 2: { value = userCell !== null ? userCell.BooleanValue : 0; break; }\r\n case 3: { value = userCell !== null ? userCell.IntegerValue : 0; break; }\r\n case 4: { value = userCell !== null ? userCell.DecimalValue : 50; /* Default value? */ break; }\r\n // TODO 5 (DateTime?)\r\n case 11: {\r\n // DirectIncome: No need to try user's cell, always return all users', which will be CMRP owner's value\r\n value = self.NumericValueTotal !== null ? self.NumericValueTotal : 0;\r\n break;\r\n }\r\n case 12: { value = userCell !== null ? userCell.DecimalValue : 0; /* Default value? */ break; }\r\n // default: { throw 'currentUserNumericValue() - Not supported element field type: ' + self.ElementField.DataType; }\r\n }\r\n\r\n if (self.backingFields._currentUserNumericValue !== value) {\r\n self.backingFields._currentUserNumericValue = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.setNumericValue();\r\n }\r\n }\r\n }\r\n\r\n function setIndexIncome(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0; // Default value?\r\n\r\n if (self.ElementField.DataType === 6 && self.SelectedElementItem !== null) {\r\n // item's index income / how many times this item has been selected (used) by higher items\r\n // TODO Check whether ParentCellSet gets updated when selecting / deselecting an item\r\n value = self.SelectedElementItem.totalResourcePoolIncome() / self.SelectedElementItem.ParentCellSet.length;\r\n } else {\r\n if (self.ElementField.IndexEnabled) {\r\n value = self.ElementField.indexIncome() * self.ratingPercentage();\r\n }\r\n }\r\n\r\n if (self.backingFields._indexIncome !== value) {\r\n self.backingFields._indexIncome = value;\r\n\r\n // TODO Update related?\r\n // item.totalResourcePoolIncome\r\n }\r\n }\r\n\r\n function setNumericValue(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value;\r\n\r\n if (typeof self.ElementField !== 'undefined') {\r\n switch (self.ElementField.Element.ResourcePool.RatingMode) {\r\n case 1: { value = self.currentUserNumericValue(); break; } // Current user's\r\n case 2: { value = self.numericValueAverage(); break; } // All\r\n }\r\n\r\n }\r\n\r\n // If it's different...\r\n if (self.backingFields._numericValue !== value) {\r\n self.backingFields._numericValue = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n\r\n if (self.ElementField.DataType === 11) {\r\n self.ElementItem.setDirectIncome();\r\n }\r\n\r\n self.setNumericValueMultiplied();\r\n }\r\n }\r\n }\r\n\r\n function setNumericValueMultiplied(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value;\r\n\r\n // if (typeof self.ElementField === 'undefined' || !self.ElementField.IndexEnabled) {\r\n if (typeof self.ElementField === 'undefined') {\r\n value = 0; // ?\r\n } else {\r\n value = self.numericValue() * self.ElementItem.multiplier();\r\n //logger.log(self.ElementField.Name[0] + '-' + self.ElementItem.Name[0] + ' NVMA ' + self.numericValue());\r\n //logger.log(self.ElementField.Name[0] + '-' + self.ElementItem.Name[0] + ' NVMB ' + self.ElementItem.multiplier());\r\n }\r\n\r\n if (self.backingFields._numericValueMultiplied !== value) {\r\n self.backingFields._numericValueMultiplied = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.ElementField.setNumericValueMultiplied();\r\n }\r\n\r\n // IMPORTANT REMARK: If the field is using IndexSortType 1,\r\n // then it would be better to directly call field.setReferenceRatingMultiplied() method.\r\n // It would be quicker to calculate.\r\n // However, since field.setNumericValueMultiplied() will make 'numericValueMultipliedPercentage' calculations\r\n // which meanwhile will call referenceRatingMultiplied() method anyway. So it becomes redundant.\r\n // This code block could possibly be improved with a IndexSortType switch case,\r\n // but it seems it would be bit overkill.\r\n // Still something to think about it later? / SH - 22 Oct. '15\r\n //self.ElementField.setReferenceRatingMultiplied();\r\n }\r\n }\r\n\r\n function setNumericValueMultipliedPercentage(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0;\r\n\r\n if (self.ElementField.IndexEnabled && self.ElementField.numericValueMultiplied() > 0) {\r\n value = self.numericValueMultiplied() / self.ElementField.numericValueMultiplied();\r\n }\r\n\r\n if (self.backingFields._numericValueMultipliedPercentage !== value) {\r\n self.backingFields._numericValueMultipliedPercentage = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n // TODO ?\r\n }\r\n }\r\n }\r\n\r\n function setOtherUsersNumericValueCount() {\r\n self.backingFields._otherUsersNumericValueCount = self.NumericValueCount;\r\n\r\n // Exclude current user's\r\n if (self.UserElementCellSet.length > 0) {\r\n self.backingFields._otherUsersNumericValueCount--;\r\n }\r\n }\r\n\r\n function setOtherUsersNumericValueTotal() {\r\n\r\n self.backingFields._otherUsersNumericValueTotal = self.NumericValueTotal !== null ?\r\n self.NumericValueTotal :\r\n 0;\r\n\r\n // Exclude current user's\r\n if (self.UserElementCellSet.length > 0) {\r\n\r\n var userValue = 0;\r\n switch (self.ElementField.DataType) {\r\n // TODO Check bool to decimal conversion?\r\n case 2: { userValue = self.UserElementCellSet[0].BooleanValue; break; }\r\n case 3: { userValue = self.UserElementCellSet[0].IntegerValue; break; }\r\n case 4: { userValue = self.UserElementCellSet[0].DecimalValue; break; }\r\n // TODO 5 - DateTime?\r\n case 11: { userValue = self.UserElementCellSet[0].DecimalValue; break; }\r\n // TODO 12 - Multiplier?\r\n //default: {\r\n // throw 'setOtherUsersNumericValueTotal - Not supported element field type: ' + self.ElementField.DataType;\r\n //}\r\n }\r\n\r\n self.backingFields._otherUsersNumericValueTotal -= userValue;\r\n }\r\n }\r\n\r\n function setPassiveRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0;\r\n\r\n if (self.ElementField.IndexEnabled) {\r\n\r\n switch (self.ElementField.IndexSortType) {\r\n case 1: { // HightestToLowest (High rating is better)\r\n value = self.numericValueMultipliedPercentage();\r\n break;\r\n }\r\n case 2: { // LowestToHighest (Low rating is better)\r\n if (self.ElementField.passiveRating() > 0) {\r\n value = (1 - self.numericValueMultipliedPercentage()) / self.ElementField.passiveRating();\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (self.backingFields._passiveRating !== value) {\r\n self.backingFields._passiveRating = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n // TODO ?\r\n }\r\n }\r\n }\r\n\r\n function setRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0;\r\n\r\n // If there is only one item, then always %100\r\n if (self.ElementField.ElementCellSet.length === 1) {\r\n value = 1;\r\n } else {\r\n switch (self.ElementField.IndexCalculationType) {\r\n case 1: // Aggressive rating\r\n {\r\n value = self.aggressiveRating();\r\n break;\r\n }\r\n case 2: // Passive rating\r\n {\r\n value = self.passiveRating();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (self.backingFields._rating !== value) {\r\n self.backingFields._rating = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n // TODO ?\r\n }\r\n }\r\n }\r\n\r\n function setRatingPercentage(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0;\r\n\r\n if (self.ElementField.IndexEnabled && self.ElementField.rating() > 0) {\r\n value = self.rating() / self.ElementField.rating();\r\n }\r\n\r\n if (self.backingFields._ratingPercentage !== value) {\r\n self.backingFields._ratingPercentage = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n // TODO ?\r\n }\r\n }\r\n }\r\n\r\n function value() {\r\n\r\n var value = null;\r\n //var currentUserCell = self.UserElementCellSet.length > 0\r\n // ? self.UserElementCellSet[0]\r\n // : null;\r\n\r\n switch (self.ElementField.DataType) {\r\n case 1: {\r\n if (self.UserElementCellSet.length > 0) {\r\n value = self.UserElementCellSet[0].StringValue;\r\n }\r\n break;\r\n }\r\n case 2: {\r\n if (self.UserElementCellSet.length > 0) {\r\n value = self.UserElementCellSet[0].BooleanValue ? 'True' : 'False';\r\n }\r\n break;\r\n }\r\n case 3: {\r\n if (self.UserElementCellSet.length > 0) {\r\n value = self.UserElementCellSet[0].IntegerValue;\r\n }\r\n break;\r\n }\r\n // TODO 5 (DateTime?)\r\n case 4:\r\n case 11:\r\n case 12: {\r\n if (self.UserElementCellSet.length > 0) {\r\n value = self.UserElementCellSet[0].DecimalValue;\r\n }\r\n break;\r\n }\r\n case 6: {\r\n if (self.SelectedElementItem !== null) {\r\n value = self.SelectedElementItem.Name;\r\n }\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'ElementField';\r\n angular.module('main')\r\n .factory(factoryId, ['$rootScope', 'logger', elementFieldFactory]);\r\n\r\n function elementFieldFactory($rootScope, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Server-side\r\n Object.defineProperty(ElementField.prototype, 'DataType', {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () { return this.backingFields._dataType; },\r\n set: function (value) {\r\n\r\n var self = this;\r\n if (self.backingFields._dataType !== value) {\r\n\r\n // Related element cells: Clear old values and set default values if necessary\r\n self.ElementCellSet.forEach(function (elementCell) {\r\n\r\n elementCell.SelectedElementItemId = null;\r\n\r\n // Remove related user cell\r\n // TODO Similar to resourcePoolFactory.js - function removeElementCell(elementCell)\r\n var userElementCellSet = elementCell.UserElementCellSet.slice();\r\n userElementCellSet.forEach(function (userElementCell) {\r\n // TODO Should this also be done through broadcast & on dataContext.js? / SH - 14 Dec. '15\r\n userElementCell.entityAspect.setDetached();\r\n });\r\n\r\n // Add user element cell, if the new type is not 'Element'\r\n if (value !== 6) {\r\n\r\n var userElementCell = elementCell.currentUserCell();\r\n\r\n var isNew = userElementCell === null;\r\n\r\n if (isNew) {\r\n // TODO Similar to resourcePoolFactory.js - function createElementCell(elementCell)\r\n userElementCell = {\r\n User: self.Element.ResourcePool.User,\r\n ElementCell: elementCell\r\n };\r\n }\r\n\r\n switch (value) {\r\n case 1: { userElementCell.StringValue = ''; break; }\r\n case 2: { userElementCell.BooleanValue = false; break; }\r\n case 3: { userElementCell.IntegerValue = 0; break; }\r\n case 4: { userElementCell.DecimalValue = 50; break; }\r\n // TODO 5 (DateTime?)\r\n case 11: { userElementCell.DecimalValue = 100; break; }\r\n case 12: { userElementCell.DecimalValue = 0; break; }\r\n }\r\n\r\n if (isNew) {\r\n $rootScope.$broadcast('ElementField_createUserElementCell', userElementCell);\r\n }\r\n }\r\n });\r\n\r\n // Finally, set it\r\n self.backingFields._dataType = value;\r\n }\r\n }\r\n });\r\n\r\n Object.defineProperty(ElementField.prototype, 'IndexEnabled', {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () { return this.backingFields._indexEnabled; },\r\n set: function (value) {\r\n\r\n if (this.backingFields._indexEnabled !== value) {\r\n this.backingFields._indexEnabled = value;\r\n\r\n this.IndexCalculationType = value ? 1 : 0;\r\n this.IndexSortType = value ? 1 : 0;\r\n\r\n // TODO Complete this block!\r\n\r\n //// Update related\r\n //// a. Element\r\n //this.Element.setElementFieldIndexSet();\r\n\r\n //// b. Item(s)\r\n //this.ElementCellSet.forEach(function(cell) {\r\n // var item = cell.ElementItem;\r\n // item.setElementCellIndexSet();\r\n //});\r\n\r\n //// c. Cells\r\n //this.ElementCellSet.forEach(function(cell) {\r\n // cell.setNumericValueMultipliedPercentage(false);\r\n //});\r\n //this.setReferenceRatingMultiplied();\r\n\r\n /* IndexEnabled related functions */\r\n //cell.setAggressiveRating();\r\n //cell.setratingPercentage();\r\n //cell.setIndexIncome();\r\n }\r\n }\r\n });\r\n\r\n // Return\r\n return ElementField;\r\n\r\n function ElementField() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.Id = 0;\r\n self.ElementId = 0;\r\n self.Name = '';\r\n //self.DataType = 1;\r\n self.SelectedElementId = null;\r\n self.UseFixedValue = null;\r\n self.IndexCalculationType = 0;\r\n self.IndexSortType = 0;\r\n self.SortOrder = 0;\r\n self.IndexRatingTotal = 0; // Computed value - Used in: setOtherUsersIndexRatingTotal\r\n self.IndexRatingCount = 0; // Computed value - Used in: setOtherUsersIndexRatingCount\r\n // TODO breezejs - Cannot assign a navigation property in an entity ctor\r\n //self.Element = null;\r\n //self.SelectedElement = null;\r\n //self.ElementCellSet = [];\r\n //self.UserElementFieldSet = [];\r\n\r\n // Local variables\r\n self.backingFields = {\r\n _dataType: 1,\r\n _indexEnabled: false,\r\n _currentUserIndexRating: null,\r\n _otherUsersIndexRatingTotal: null,\r\n _otherUsersIndexRatingCount: null,\r\n _indexRating: null,\r\n _indexRatingPercentage: null,\r\n _numericValueMultiplied: null,\r\n _passiveRating: null,\r\n _referenceRatingMultiplied: null,\r\n // Aggressive rating formula prevents the organizations with the worst rating to get any income.\r\n // However, in case all ratings are equal, then no one can get any income from the pool.\r\n // This flag is used to determine this special case and let all organizations get a same share from the pool.\r\n // See the usage in aggressiveRating() in elementCell.js\r\n // TODO Usage of this field is correct?\r\n _referenceRatingAllEqualFlag: true,\r\n _aggressiveRating: null,\r\n _rating: null,\r\n _indexIncome: null\r\n };\r\n self.isEditing = false;\r\n\r\n // Functions\r\n self.currentUserElementField = currentUserElementField;\r\n self.currentUserIndexRating = currentUserIndexRating;\r\n self.indexIncome = indexIncome;\r\n self.indexRating = indexRating;\r\n self.indexRatingAverage = indexRatingAverage;\r\n self.indexRatingCount = indexRatingCount;\r\n self.indexRatingPercentage = indexRatingPercentage;\r\n self.indexRatingTotal = indexRatingTotal;\r\n self.numericValueMultiplied = numericValueMultiplied;\r\n self.otherUsersIndexRatingCount = otherUsersIndexRatingCount;\r\n self.otherUsersIndexRatingTotal = otherUsersIndexRatingTotal;\r\n self.passiveRating = passiveRating;\r\n self.rating = rating;\r\n self.referenceRatingAllEqualFlag = referenceRatingAllEqualFlag;\r\n self.referenceRatingMultiplied = referenceRatingMultiplied;\r\n self.setCurrentUserIndexRating = setCurrentUserIndexRating;\r\n self.setIndexIncome = setIndexIncome;\r\n self.setIndexRating = setIndexRating;\r\n self.setIndexRatingPercentage = setIndexRatingPercentage;\r\n self.setNumericValueMultiplied = setNumericValueMultiplied;\r\n self.setOtherUsersIndexRatingCount = setOtherUsersIndexRatingCount;\r\n self.setOtherUsersIndexRatingTotal = setOtherUsersIndexRatingTotal;\r\n self.setPassiveRating = setPassiveRating;\r\n self.setRating = setRating;\r\n self.setReferenceRatingAllEqualFlag = setReferenceRatingAllEqualFlag;\r\n self.setReferenceRatingMultiplied = setReferenceRatingMultiplied;\r\n\r\n /*** Implementations ***/\r\n\r\n function currentUserElementField() {\r\n return self.UserElementFieldSet.length > 0 ?\r\n self.UserElementFieldSet[0] :\r\n null;\r\n }\r\n\r\n function currentUserIndexRating() {\r\n\r\n if (self.backingFields._currentUserIndexRating === null) {\r\n self.setCurrentUserIndexRating(false);\r\n }\r\n\r\n return self.backingFields._currentUserIndexRating;\r\n }\r\n\r\n function indexIncome() {\r\n\r\n if (self.backingFields._indexIncome === null) {\r\n self.setIndexIncome(false);\r\n }\r\n\r\n return self.backingFields._indexIncome;\r\n }\r\n\r\n function indexRating() {\r\n\r\n if (self.backingFields._indexRating === null) {\r\n self.setIndexRating(false);\r\n }\r\n\r\n return self.backingFields._indexRating;\r\n }\r\n\r\n function indexRatingAverage() {\r\n\r\n if (self.indexRatingCount() === null) {\r\n return null;\r\n }\r\n\r\n return self.indexRatingCount() === 0 ?\r\n 0 :\r\n self.indexRatingTotal() / self.indexRatingCount();\r\n }\r\n\r\n function indexRatingCount() {\r\n return self.otherUsersIndexRatingCount() + 1;\r\n }\r\n\r\n function indexRatingPercentage() {\r\n\r\n if (self.backingFields._indexRatingPercentage === null) {\r\n self.setIndexRatingPercentage(false);\r\n }\r\n\r\n return self.backingFields._indexRatingPercentage;\r\n }\r\n\r\n function indexRatingTotal() {\r\n return self.otherUsersIndexRatingTotal() + self.currentUserIndexRating();\r\n }\r\n\r\n function numericValueMultiplied() {\r\n\r\n if (self.backingFields._numericValueMultiplied === null) {\r\n self.setNumericValueMultiplied(false);\r\n }\r\n\r\n return self.backingFields._numericValueMultiplied;\r\n }\r\n\r\n // TODO Since this is a fixed value based on IndexRatingCount & current user's rate,\r\n // it could be calculated on server, check it later again / SH - 03 Aug. '15\r\n function otherUsersIndexRatingCount() {\r\n\r\n // Set other users' value on the initial call\r\n if (self.backingFields._otherUsersIndexRatingCount === null) {\r\n self.setOtherUsersIndexRatingCount();\r\n }\r\n\r\n return self.backingFields._otherUsersIndexRatingCount;\r\n }\r\n\r\n // TODO Since this is a fixed value based on IndexRatingTotal & current user's rate,\r\n // it could be calculated on server, check it later again / SH - 03 Aug. '15\r\n function otherUsersIndexRatingTotal() {\r\n\r\n // Set other users' value on the initial call\r\n if (self.backingFields._otherUsersIndexRatingTotal === null) {\r\n self.setOtherUsersIndexRatingTotal();\r\n }\r\n\r\n return self.backingFields._otherUsersIndexRatingTotal;\r\n }\r\n\r\n // Helper function for Index Rating Type 1 case (low rating is better)\r\n function passiveRating() {\r\n if (self.backingFields._passiveRating === null) {\r\n self.setPassiveRating(false);\r\n }\r\n\r\n return self.backingFields._passiveRating;\r\n }\r\n\r\n function rating() {\r\n\r\n if (self.backingFields._rating === null) {\r\n self.setRating(false);\r\n }\r\n\r\n return self.backingFields._rating;\r\n }\r\n\r\n function referenceRatingAllEqualFlag(value) {\r\n return self.backingFields._referenceRatingAllEqualFlag;\r\n }\r\n\r\n function referenceRatingMultiplied() {\r\n\r\n if (self.backingFields._referenceRatingMultiplied === null) {\r\n self.setReferenceRatingMultiplied(false);\r\n }\r\n\r\n return self.backingFields._referenceRatingMultiplied;\r\n }\r\n\r\n function setCurrentUserIndexRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = self.currentUserElementField() !== null ?\r\n self.currentUserElementField().Rating :\r\n 50; // If there is no rating, this is the default value?\r\n\r\n if (self.backingFields._currentUserIndexRating !== value) {\r\n self.backingFields._currentUserIndexRating = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.setIndexRating();\r\n }\r\n }\r\n }\r\n\r\n function setIndexIncome(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = self.Element.totalResourcePoolAmount() * self.indexRatingPercentage();\r\n\r\n //if (self.IndexEnabled) {\r\n //logger.log(self.Name[0] + ' II ' + value.toFixed(2));\r\n //}\r\n\r\n if (self.backingFields._indexIncome !== value) {\r\n self.backingFields._indexIncome = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setIndexIncome();\r\n });\r\n }\r\n }\r\n }\r\n\r\n function setIndexRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0; // Default value?\r\n\r\n switch (self.Element.ResourcePool.RatingMode) {\r\n case 1: { value = self.currentUserIndexRating(); break; } // Current user's\r\n case 2: { value = self.indexRatingAverage(); break; } // All\r\n }\r\n\r\n //logger.log(self.Name[0] + ' IR ' + value.toFixed(2));\r\n\r\n if (self.backingFields._indexRating !== value) {\r\n self.backingFields._indexRating = value;\r\n\r\n // TODO Update related\r\n if (updateRelated) {\r\n self.Element.ResourcePool.mainElement().setIndexRating();\r\n }\r\n }\r\n }\r\n\r\n function setIndexRatingPercentage(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0; // Default value?\r\n\r\n var elementIndexRating = self.Element.ResourcePool.mainElement().indexRating();\r\n\r\n if (elementIndexRating === 0) {\r\n value = 0;\r\n } else {\r\n value = self.indexRating() / elementIndexRating;\r\n }\r\n\r\n //logger.log(self.Name[0] + ' IRP ' + value.toFixed(2));\r\n\r\n if (self.backingFields._indexRatingPercentage !== value) {\r\n self.backingFields._indexRatingPercentage = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.setIndexIncome();\r\n }\r\n }\r\n }\r\n\r\n function setNumericValueMultiplied(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0; // Default value?\r\n\r\n // Validate\r\n if (self.ElementCellSet.length === 0) {\r\n value = 0; // ?\r\n } else {\r\n self.ElementCellSet.forEach(function (cell) {\r\n value += cell.numericValueMultiplied();\r\n //logger.log(self.Name[0] + '-' + cell.ElementItem.Name[0] + ' NVMA ' + cell.numericValueMultiplied());\r\n });\r\n }\r\n\r\n if (self.backingFields._numericValueMultiplied !== value) {\r\n self.backingFields._numericValueMultiplied = value;\r\n\r\n //logger.log(self.Name[0] + ' NVMB ' + value.toFixed(2));\r\n\r\n // Update related?\r\n if (updateRelated && self.IndexEnabled) {\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setNumericValueMultipliedPercentage(false);\r\n });\r\n\r\n self.setPassiveRating(false);\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setPassiveRating(false);\r\n });\r\n\r\n self.setReferenceRatingMultiplied(false);\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setAggressiveRating(false);\r\n });\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setRating(false);\r\n });\r\n\r\n self.setRating(false);\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setRatingPercentage(false);\r\n });\r\n\r\n //self.setIndexIncome(false);\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setIndexIncome(false);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function setOtherUsersIndexRatingCount() {\r\n self.backingFields._otherUsersIndexRatingCount = self.IndexRatingCount;\r\n\r\n // Exclude current user's\r\n if (self.currentUserElementField() !== null) {\r\n self.backingFields._otherUsersIndexRatingCount--;\r\n }\r\n }\r\n\r\n function setOtherUsersIndexRatingTotal() {\r\n self.backingFields._otherUsersIndexRatingTotal = self.IndexRatingTotal !== null ?\r\n self.IndexRatingTotal :\r\n 0;\r\n\r\n // Exclude current user's\r\n if (self.currentUserElementField() !== null) {\r\n self.backingFields._otherUsersIndexRatingTotal -= self.currentUserElementField().Rating;\r\n }\r\n }\r\n\r\n function setPassiveRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0;\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n value += 1 - cell.numericValueMultipliedPercentage();\r\n });\r\n\r\n if (self.backingFields._passiveRating !== value) {\r\n self.backingFields._passiveRating = value;\r\n\r\n if (updateRelated) {\r\n // TODO ?\r\n }\r\n }\r\n }\r\n\r\n function setRating(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = 0; // Default value?\r\n\r\n // Validate\r\n self.ElementCellSet.forEach(function (cell) {\r\n value += cell.rating();\r\n });\r\n\r\n //logger.log(self.Name[0] + ' AR ' + value.toFixed(2));\r\n\r\n if (self.backingFields._rating !== value) {\r\n self.backingFields._rating = value;\r\n\r\n //logger.log(self.Name[0] + ' AR OK');\r\n\r\n if (updateRelated) {\r\n\r\n // Update related\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setRatingPercentage(false);\r\n });\r\n\r\n self.setIndexIncome();\r\n }\r\n }\r\n }\r\n\r\n function setReferenceRatingAllEqualFlag(value) {\r\n\r\n if (self.backingFields._referenceRatingAllEqualFlag !== value) {\r\n self.backingFields._referenceRatingAllEqualFlag = value;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // TODO Currently updateRelated is always 'false'?\r\n function setReferenceRatingMultiplied(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = null;\r\n var allEqualFlag = true;\r\n\r\n // Validate\r\n if (self.ElementCellSet.length === 0) {\r\n value = 0; // ?\r\n } else {\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n\r\n if (value === null) {\r\n\r\n switch (self.IndexSortType) {\r\n case 1: { // HighestToLowest (High number is better)\r\n value = (1 - cell.numericValueMultipliedPercentage());\r\n break;\r\n }\r\n case 2: { // LowestToHighest (Low number is better)\r\n value = cell.numericValueMultiplied();\r\n break;\r\n }\r\n }\r\n\r\n } else {\r\n\r\n switch (self.IndexSortType) {\r\n case 1: { // HighestToLowest (High number is better)\r\n\r\n if (1 - cell.numericValueMultipliedPercentage() !== value) {\r\n allEqualFlag = false;\r\n }\r\n\r\n if (1 - cell.numericValueMultipliedPercentage() > value) {\r\n value = 1 - cell.numericValueMultipliedPercentage();\r\n }\r\n break;\r\n }\r\n case 2: { // LowestToHighest (Low number is better)\r\n\r\n if (cell.numericValueMultiplied() !== value) {\r\n allEqualFlag = false;\r\n }\r\n\r\n if (cell.numericValueMultiplied() > value) {\r\n value = cell.numericValueMultiplied();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n //logger.log(self.Name[0] + '-' + cell.ElementItem.Name[0] + ' RRMA ' + value.toFixed(2));\r\n\r\n // Set all equal flag\r\n var flagUpdated = self.setReferenceRatingAllEqualFlag(allEqualFlag);\r\n var ratingUpdated = false;\r\n\r\n // Only if it's different..\r\n if (self.backingFields._referenceRatingMultiplied !== value) {\r\n self.backingFields._referenceRatingMultiplied = value;\r\n\r\n ratingUpdated = true;\r\n\r\n //logger.log(self.Name[0] + ' RRMB ' + value.toFixed(2));\r\n }\r\n\r\n // Update related\r\n if ((flagUpdated || ratingUpdated) && updateRelated) {\r\n\r\n // TODO ?!\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n cell.setAggressiveRating(false);\r\n });\r\n\r\n // self.setAggressiveRating();\r\n }\r\n }\r\n\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'ElementItem';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', elementItemFactory]);\r\n\r\n function elementItemFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Return\r\n return ElementItem;\r\n\r\n function ElementItem() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.Id = 0;\r\n self.ElementId = 0;\r\n self.Name = '';\r\n // TODO breezejs - Cannot assign a navigation property in an entity ctor\r\n //self.Element = null;\r\n //self.ElementCellSet = [];\r\n //self.ParentCellSet = [];\r\n\r\n // Local variables\r\n self.backingFields = {\r\n _elementCellIndexSet: null,\r\n _directIncome: null,\r\n _multiplier: null,\r\n _totalDirectIncome: null,\r\n _resourcePoolAmount: null,\r\n _totalResourcePoolAmount: null,\r\n _totalResourcePoolIncome: null\r\n };\r\n self.isEditing = false;\r\n\r\n // Functions\r\n self.directIncome = directIncome;\r\n self.directIncomeIncludingResourcePoolAmount = directIncomeIncludingResourcePoolAmount;\r\n self.elementCellIndexSet = elementCellIndexSet;\r\n self.incomeStatus = incomeStatus;\r\n self.multiplier = multiplier;\r\n self.resourcePoolAmount = resourcePoolAmount;\r\n self.setDirectIncome = setDirectIncome;\r\n self.setElementCellIndexSet = setElementCellIndexSet;\r\n self.setMultiplier = setMultiplier;\r\n self.setResourcePoolAmount = setResourcePoolAmount;\r\n self.setTotalDirectIncome = setTotalDirectIncome;\r\n self.setTotalResourcePoolAmount = setTotalResourcePoolAmount;\r\n self.totalDirectIncome = totalDirectIncome;\r\n self.totalDirectIncomeIncludingResourcePoolAmount = totalDirectIncomeIncludingResourcePoolAmount;\r\n self.totalIncome = totalIncome;\r\n self.totalResourcePoolAmount = totalResourcePoolAmount;\r\n self.totalResourcePoolIncome = totalResourcePoolIncome;\r\n\r\n /*** Implementations ***/\r\n\r\n function directIncome() {\r\n\r\n if (self.backingFields._directIncome === null) {\r\n self.setDirectIncome(false);\r\n }\r\n\r\n return self.backingFields._directIncome;\r\n }\r\n\r\n function directIncomeIncludingResourcePoolAmount() { // A.k.a Sales Price incl. VAT\r\n return self.directIncome() + self.resourcePoolAmount();\r\n }\r\n\r\n function elementCellIndexSet() {\r\n\r\n if (self.backingFields._elementCellIndexSet === null) {\r\n self.setElementCellIndexSet();\r\n }\r\n\r\n return self.backingFields._elementCellIndexSet;\r\n }\r\n\r\n function getElementCellIndexSet(elementItem) {\r\n\r\n var indexSet = [];\r\n var sortedElementCellSet = elementItem.ElementCellSet.sort(function (a, b) {\r\n return a.ElementField.SortOrder - b.ElementField.SortOrder;\r\n });\r\n\r\n sortedElementCellSet.forEach(function (cell) {\r\n\r\n if (cell.ElementField.IndexEnabled) {\r\n indexSet.push(cell);\r\n }\r\n\r\n if (cell.ElementField.DataType === 6 && cell.SelectedElementItem !== null) {\r\n var childIndexSet = getElementCellIndexSet(cell.SelectedElementItem);\r\n\r\n if (childIndexSet.length > 0) {\r\n indexSet.push(cell);\r\n }\r\n }\r\n });\r\n\r\n return indexSet;\r\n }\r\n\r\n function incomeStatus() {\r\n\r\n var totalIncome = self.totalIncome();\r\n // TODO Make rounding better, instead of toFixed + number\r\n var averageIncome = Number(self.Element.totalIncomeAverage().toFixed(2));\r\n\r\n if (totalIncome === averageIncome) {\r\n return 'average';\r\n } else if (totalIncome < averageIncome) {\r\n return 'low';\r\n } else if (totalIncome > averageIncome) {\r\n return 'high';\r\n }\r\n }\r\n\r\n function multiplier() {\r\n\r\n if (self.backingFields._multiplier === null) {\r\n self.setMultiplier(false);\r\n }\r\n\r\n return self.backingFields._multiplier;\r\n }\r\n\r\n function resourcePoolAmount() {\r\n\r\n if (self.backingFields._resourcePoolAmount === null) {\r\n self.setResourcePoolAmount(false);\r\n }\r\n\r\n return self.backingFields._resourcePoolAmount;\r\n }\r\n\r\n function setDirectIncome(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n // First, find direct income cell\r\n var directIncomeCell = null;\r\n\r\n var result = self.ElementCellSet.filter(function (elementCell) {\r\n return elementCell.ElementField.DataType === 11;\r\n });\r\n\r\n if (result.length > 0) {\r\n directIncomeCell = result[0];\r\n }\r\n\r\n var value;\r\n if (directIncomeCell === null) {\r\n value = 0;\r\n } else {\r\n value = directIncomeCell.numericValue();\r\n }\r\n\r\n if (self.backingFields._directIncome !== value) {\r\n self.backingFields._directIncome = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.setTotalDirectIncome();\r\n self.setResourcePoolAmount();\r\n }\r\n }\r\n }\r\n\r\n function setElementCellIndexSet() {\r\n self.backingFields._elementCellIndexSet = getElementCellIndexSet(self);\r\n }\r\n\r\n function setMultiplier(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n // First, find the multiplier cell\r\n var multiplierCell = null;\r\n\r\n var result = self.ElementCellSet.filter(function(elementCell) {\r\n return elementCell.ElementField.DataType === 12;\r\n });\r\n\r\n if (result.length > 0) {\r\n multiplierCell = result[0];\r\n }\r\n\r\n var value = 0;\r\n\r\n // If there is no multiplier field defined on this element, return 1, so it can return calculate the income correctly\r\n // TODO Cover 'add new multiplier field' case as well!\r\n if (multiplierCell === null) {\r\n value = 1;\r\n } else {\r\n\r\n // If there is a multiplier field on the element but user is not set any value, return 0 as the default value\r\n if (multiplierCell.currentUserCell() === null ||\r\n multiplierCell.currentUserCell().DecimalValue === null) {\r\n value = 0;\r\n } else { // Else, user's\r\n value = multiplierCell.currentUserCell().DecimalValue;\r\n }\r\n }\r\n\r\n if (self.backingFields._multiplier !== value) {\r\n self.backingFields._multiplier = value;\r\n\r\n // Update related\r\n self.setTotalDirectIncome();\r\n self.setTotalResourcePoolAmount();\r\n }\r\n }\r\n\r\n function setResourcePoolAmount(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = self.directIncome() * self.Element.ResourcePool.resourcePoolRatePercentage();\r\n\r\n if (self.backingFields._resourcePoolAmount !== value) {\r\n self.backingFields._resourcePoolAmount = value;\r\n\r\n // TODO Update related\r\n if (updateRelated) {\r\n self.setTotalResourcePoolAmount();\r\n }\r\n }\r\n }\r\n\r\n function setTotalDirectIncome(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = self.directIncome() * self.multiplier();\r\n\r\n if (self.backingFields._totalDirectIncome !== value) {\r\n self.backingFields._totalDirectIncome = value;\r\n\r\n // TODO Update related\r\n if (updateRelated) {\r\n\r\n }\r\n }\r\n }\r\n\r\n function setTotalResourcePoolAmount(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = self.resourcePoolAmount() * self.multiplier();\r\n\r\n if (self.backingFields._totalResourcePoolAmount !== value) {\r\n self.backingFields._totalResourcePoolAmount = value;\r\n\r\n // TODO Update related\r\n if (updateRelated) {\r\n\r\n }\r\n }\r\n }\r\n\r\n function totalDirectIncome() {\r\n\r\n if (self.backingFields._totalDirectIncome === null) {\r\n self.setTotalDirectIncome(false);\r\n }\r\n\r\n return self.backingFields._totalDirectIncome;\r\n }\r\n\r\n function totalDirectIncomeIncludingResourcePoolAmount() { // A.k.a Total Sales Price incl. VAT\r\n return self.directIncomeIncludingResourcePoolAmount() * self.multiplier();\r\n }\r\n\r\n function totalIncome() {\r\n var totalIncome = self.totalDirectIncome() + self.totalResourcePoolIncome();\r\n // TODO Make rounding better, instead of toFixed + number\r\n return Number(totalIncome.toFixed(2));\r\n }\r\n\r\n function totalResourcePoolAmount() {\r\n\r\n if (self.backingFields._totalResourcePoolAmount === null) {\r\n self.setTotalResourcePoolAmount(false);\r\n }\r\n\r\n return self.backingFields._totalResourcePoolAmount;\r\n }\r\n\r\n // TODO This is out of pattern!\r\n function totalResourcePoolIncome() {\r\n\r\n var value = 0;\r\n\r\n self.ElementCellSet.forEach(function (cell) {\r\n value += cell.indexIncome();\r\n });\r\n\r\n if (self.backingFields._totalResourcePoolIncome !== value) {\r\n self.backingFields._totalResourcePoolIncome = value;\r\n\r\n // Update related\r\n // TODO Is this correct? It looks like it didn't affect anything?\r\n self.ParentCellSet.forEach(function (parentCell) {\r\n parentCell.setIndexIncome();\r\n });\r\n }\r\n\r\n return value;\r\n }\r\n\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'Enums';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', enumsFactory]);\r\n\r\n function enumsFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n var self = {};\r\n\r\n self.ElementFieldDataType = {\r\n\r\n // A field that holds string value.\r\n // Use StringValue property to set its value on ElementItem level.\r\n 'String': 1,\r\n\r\n // A field that holds boolean value.\r\n // Use BooleanValue property to set its value on ElementItem level.\r\n 'Boolean': 2,\r\n\r\n // A field that holds integer value.\r\n // Use IntegerValue property to set its value on ElementItem level.\r\n 'Integer': 3,\r\n\r\n // A field that holds decimal value.\r\n // Use DecimalValue property to set its value on ElementItem level.\r\n 'Decimal': 4,\r\n\r\n //// A field that holds DateTime value.\r\n //// Use DateTimeValue property to set its value on ElementItem level.\r\n //'DateTime': 5,\r\n\r\n // A field that holds another defined Element object within the resource pool.\r\n // Use SelectedElementItem property to set its value on ElementItem level.\r\n 'Element': 6,\r\n\r\n // The field that presents each item's main income (e.g. Sales Price).\r\n // Also resource pool amount will be calculated based on this field.\r\n // Defined once per Element (at the moment, can be changed to per Resource Pool).\r\n // Use DecimalValue property to set its value on ElementItem level.\r\n 'DirectIncome': 11,\r\n\r\n // The multiplier of the resource pool (e.g. Number of sales, number of users).\r\n // Defined once per Element (at the moment, can be changed to per Resource Pool).\r\n // Use DecimalValue property to set its value on ElementItem level.\r\n 'Multiplier': 12\r\n };\r\n \r\n self.ElementFieldIndexCalculationType = {\r\n // Default type.\r\n // Uses the lowest score as the base (reference) rating in the group, then calculates the difference from that base.\r\n // Base rating (lowest) gets 0 from the pool and other items get an amount based on their difference.\r\n // Aims to maximize the benefit of the pool.\r\n 'Aggressive': 1,\r\n\r\n // Sums all ratings and calculates the percentages.\r\n // All items get an amount, including the lowest scored item.\r\n // Good for cases that only use 'Resource Pool - Initial Amount' feature.\r\n 'Passive': 2\r\n };\r\n\r\n self.ElementFieldIndexSortType = {\r\n\r\n // Default type.\r\n // High rating is better.\r\n 'Highest': 1,\r\n\r\n // Low rating is better.\r\n 'Lowest': 2\r\n };\r\n\r\n self.getEnumKey = function (enumTableKey, value) {\r\n for (var tableKey in self) {\r\n\r\n // Ignore these tables\r\n if (enumTableKey === '$get' || enumTableKey === 'getEnumKey') {\r\n return;\r\n }\r\n\r\n // Search through enum tables & their values\r\n if (tableKey === enumTableKey) {\r\n for (var valueKey in self[tableKey]) {\r\n if (self[tableKey][valueKey] === value) {\r\n return valueKey;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n return self;\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'ResourcePool';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', resourcePoolFactory]);\r\n\r\n function resourcePoolFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Server-side properties\r\n Object.defineProperty(ResourcePool.prototype, 'UseFixedResourcePoolRate', {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () { return this.backingFields._useFixedResourcePoolRate; },\r\n set: function (value) {\r\n\r\n if (this.backingFields._useFixedResourcePoolRate !== value) {\r\n this.backingFields._useFixedResourcePoolRate = value;\r\n\r\n this.setResourcePoolRate();\r\n }\r\n }\r\n });\r\n\r\n // Client-side properties\r\n Object.defineProperty(ResourcePool.prototype, 'RatingMode', {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () { return this.backingFields._ratingMode; },\r\n set: function (value) {\r\n if (this.backingFields._ratingMode !== value) {\r\n this.backingFields._ratingMode = value;\r\n\r\n this.setResourcePoolRate();\r\n\r\n this.ElementSet.forEach(function (element) {\r\n\r\n element.ElementFieldSet.forEach(function (field) {\r\n\r\n // Field calculations\r\n if (field.IndexEnabled) {\r\n field.setIndexRating();\r\n }\r\n\r\n if (!field.UseFixedValue) {\r\n field.ElementCellSet.forEach(function (cell) {\r\n\r\n // Cell calculations\r\n switch (field.DataType) {\r\n case 2:\r\n case 3:\r\n case 4:\r\n // TODO 5 (DateTime?)\r\n case 11:\r\n case 12: {\r\n cell.setNumericValue();\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n });\r\n\r\n // Return\r\n return ResourcePool;\r\n\r\n function ResourcePool() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.Id = 0;\r\n self.UserId = 0;\r\n self.Name = '';\r\n self.InitialValue = 0;\r\n self.ResourcePoolRateTotal = 0; // Computed value - Used in: setOtherUsersResourcePoolRateTotal\r\n self.ResourcePoolRateCount = 0; // Computed value - Used in: setOtherUsersResourcePoolRateCount\r\n self.RatingCount = 0; // Computed value - Used in: resourcePoolEditor.html\r\n // TODO breezejs - Cannot assign a navigation property in an entity ctor\r\n //self.User = null;\r\n //self.ElementSet = [];\r\n //self.UserResourcePoolSet = [];\r\n\r\n // Local variables\r\n self.backingFields = {\r\n _currentUserResourcePoolRate: null,\r\n _isAdded: false,\r\n _otherUsersResourcePoolRateTotal: null,\r\n _otherUsersResourcePoolRateCount: null,\r\n _ratingMode: 1, // Only my ratings vs. All users' ratings\r\n _resourcePoolRate: null,\r\n _resourcePoolRatePercentage: null,\r\n _selectedElement: null,\r\n _useFixedResourcePoolRate: false\r\n };\r\n self.isEditing = false; // Determines whether the object is being edited or not\r\n self.isTemp = false; // Determines whether object was created for demo purposes or not\r\n // TODO Move this to field.js?\r\n self.displayMultiplierFunctions = true; // In some cases, it's not necessary for the user to change multiplier\r\n\r\n // Functions\r\n self._init = _init;\r\n self.currentUserResourcePool = currentUserResourcePool;\r\n self.currentUserResourcePoolRate = currentUserResourcePoolRate;\r\n self.displayResourcePoolDetails = displayResourcePoolDetails;\r\n self.displayRatingMode = displayRatingMode;\r\n self.getEntities = getEntities;\r\n // Determines whether entityState is actually isAdded.\r\n // Anonymous users can also add/edit resource pool.\r\n // However, when an anonymous user adds a new resource pool, it actually doesn't save to database and entityState stays as isAdded().\r\n // Then, when the user clicks on 'Cancel CMRP', rejectChanges() will be called, which removes the resource pool.\r\n // To prevent this issue, when anon user calls saveChanges, this flag will be used (isAdded will become true) and acceptChanges will be called (still not saving to actual database).\r\n // Now, calling rejectChanges will return the entities to their previous state without any problem.\r\n // And if the anon user will register or login, this flag will be checked in dataContext.js and all the related entities will be converted back to isAdded() state.\r\n // SH - 30 Nov. '15\r\n self.isAdded = isAdded;\r\n self.mainElement = mainElement;\r\n self.name = name;\r\n self.otherUsersResourcePoolRateCount = otherUsersResourcePoolRateCount;\r\n self.otherUsersResourcePoolRateTotal = otherUsersResourcePoolRateTotal;\r\n self.resourcePoolRate = resourcePoolRate;\r\n self.resourcePoolRateAverage = resourcePoolRateAverage;\r\n self.resourcePoolRateCount = resourcePoolRateCount;\r\n self.resourcePoolRatePercentage = resourcePoolRatePercentage;\r\n self.resourcePoolRateTotal = resourcePoolRateTotal;\r\n self.selectedElement = selectedElement;\r\n self.setCurrentUserResourcePoolRate = setCurrentUserResourcePoolRate;\r\n self.setOtherUsersResourcePoolRateCount = setOtherUsersResourcePoolRateCount;\r\n self.setOtherUsersResourcePoolRateTotal = setOtherUsersResourcePoolRateTotal;\r\n self.setResourcePoolRate = setResourcePoolRate;\r\n self.setResourcePoolRatePercentage = setResourcePoolRatePercentage;\r\n self.toggleRatingMode = toggleRatingMode;\r\n self.updateAnonymousEntities = updateAnonymousEntities;\r\n self.updateCache = updateCache;\r\n\r\n /*** Implementations ***/\r\n\r\n // Should be called after createEntity or retrieving it from server\r\n function _init(setComputedFields) {\r\n setComputedFields = typeof setComputedFields !== 'undefined' ? setComputedFields : false;\r\n\r\n // Set initial values of computed fields\r\n if (setComputedFields) {\r\n\r\n var userRatings = [];\r\n\r\n // ResourcePool\r\n self.UserResourcePoolSet.forEach(function (userResourcePool) {\r\n self.ResourcePoolRateTotal += userResourcePool.ResourcePoolRate;\r\n self.ResourcePoolRateCount += 1;\r\n\r\n if (userRatings.indexOf(userResourcePool.UserId) === -1) {\r\n userRatings.push(userResourcePool.UserId);\r\n }\r\n });\r\n\r\n // Fields\r\n self.ElementSet.forEach(function (element) {\r\n element.ElementFieldSet.forEach(function (elementField) {\r\n elementField.UserElementFieldSet.forEach(function (userElementField) {\r\n elementField.IndexRatingTotal += userElementField.IndexRating;\r\n elementField.IndexRatingCount += 1;\r\n\r\n if (userRatings.indexOf(userElementField.UserId) === -1) {\r\n userRatings.push(userElementField.UserId);\r\n }\r\n });\r\n\r\n // Cells\r\n elementField.ElementCellSet.forEach(function (elementCell) {\r\n elementCell.UserElementCellSet.forEach(function (userElementCell) {\r\n elementCell.StringValue = ''; // TODO ?\r\n elementCell.NumericValueTotal += userElementCell.DecimalValue; // TODO Correct approach?\r\n elementCell.NumericValueCount += 1;\r\n\r\n if (elementField.IndexEnabled) {\r\n if (userRatings.indexOf(userElementCell.UserId) === -1) {\r\n userRatings.push(userElementCell.UserId);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n\r\n // Rating count\r\n self.RatingCount = userRatings.length;\r\n }\r\n\r\n // Set otherUsers' data\r\n self.setOtherUsersResourcePoolRateTotal();\r\n self.setOtherUsersResourcePoolRateCount();\r\n\r\n // Elements\r\n if (typeof self.ElementSet !== 'undefined') {\r\n self.ElementSet.forEach(function (element) {\r\n\r\n // Fields\r\n if (typeof element.ElementFieldSet !== 'undefined') {\r\n element.ElementFieldSet.forEach(function (field) {\r\n\r\n field.setOtherUsersIndexRatingTotal();\r\n field.setOtherUsersIndexRatingCount();\r\n\r\n // Cells\r\n if (typeof field.ElementCellSet !== 'undefined') {\r\n field.ElementCellSet.forEach(function (cell) {\r\n\r\n cell.setOtherUsersNumericValueTotal();\r\n cell.setOtherUsersNumericValueCount();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n updateCache();\r\n }\r\n\r\n function currentUserResourcePool() {\r\n return self.UserResourcePoolSet.length > 0 ?\r\n self.UserResourcePoolSet[0] :\r\n null;\r\n }\r\n\r\n function currentUserResourcePoolRate() {\r\n\r\n if (self.backingFields._currentUserResourcePoolRate === null) {\r\n self.setCurrentUserResourcePoolRate(false);\r\n }\r\n\r\n return self.backingFields._currentUserResourcePoolRate;\r\n }\r\n\r\n function displayResourcePoolDetails() {\r\n return self.selectedElement().directIncomeField() !== null &&\r\n self.selectedElement().elementFieldIndexSet().length > 0;\r\n }\r\n\r\n // Checks whether resource pool has any item that can be rateable\r\n // Obsolete: Replaced with RatingCount > 0 / coni2k - 21 Feb. '16\r\n function displayRatingMode() {\r\n\r\n // Check resource pool level first\r\n if (!self.UseFixedResourcePoolRate) {\r\n return true;\r\n }\r\n\r\n // Field index level\r\n for (var elementIndex = 0; elementIndex < self.ElementSet.length; elementIndex++) {\r\n var element = self.ElementSet[elementIndex];\r\n\r\n // If there are multiple indexes, then the users can set index rating\r\n if (element.elementFieldIndexSet().length > 1) {\r\n return true;\r\n }\r\n\r\n // If there is an index without a fixed value\r\n if (element.elementFieldIndexSet().length > 0 && !element.elementFieldIndexSet()[0].UseFixedValue) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function getEntities() {\r\n\r\n var entities = [];\r\n\r\n // No need to continue\r\n if (self.isTemp) {\r\n return entities;\r\n }\r\n\r\n // Resource pool\r\n entities.push(self);\r\n\r\n // User resource pools\r\n self.UserResourcePoolSet.forEach(function (userResourcePool) {\r\n entities.push(userResourcePool);\r\n });\r\n\r\n // Elements\r\n self.ElementSet.forEach(function (element) {\r\n entities.push(element);\r\n\r\n // Fields\r\n element.ElementFieldSet.forEach(function (elementField) {\r\n entities.push(elementField);\r\n\r\n // User element fields\r\n elementField.UserElementFieldSet.forEach(function (userElementField) {\r\n entities.push(userElementField);\r\n });\r\n });\r\n\r\n // Items\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n entities.push(elementItem);\r\n\r\n // Cells\r\n elementItem.ElementCellSet.forEach(function (elementCell) {\r\n entities.push(elementCell);\r\n\r\n // User cells\r\n elementCell.UserElementCellSet.forEach(function (userElementCell) {\r\n entities.push(userElementCell);\r\n });\r\n });\r\n });\r\n });\r\n\r\n return entities;\r\n }\r\n\r\n function isAdded(value) {\r\n if (typeof value !== 'undefined') {\r\n self.backingFields._isAdded = value;\r\n }\r\n return self.backingFields._isAdded;\r\n }\r\n\r\n function mainElement() {\r\n var result = self.ElementSet.filter(function (element) {\r\n return element.IsMainElement;\r\n });\r\n\r\n return result.length > 0 ? result[0] : null;\r\n }\r\n\r\n function name() {\r\n var name = self.Name;\r\n name += self.isEditing ? ' - Editing' : '';\r\n return name;\r\n }\r\n\r\n // TODO Since this is a fixed value based on ResourcePoolRateCount & current user's rate,\r\n // it could be calculated on server, check it later again / SH - 03 Aug. '15\r\n function otherUsersResourcePoolRateCount() {\r\n\r\n // Set other users' value on the initial call\r\n if (self.backingFields._otherUsersResourcePoolRateCount === null) {\r\n self.setOtherUsersResourcePoolRateCount();\r\n }\r\n\r\n return self.backingFields._otherUsersResourcePoolRateCount;\r\n }\r\n\r\n // TODO Since this is a fixed value based on ResourcePoolRateTotal & current user's rate,\r\n // it could be calculated on server, check it later again / SH - 03 Aug. '15\r\n function otherUsersResourcePoolRateTotal() {\r\n\r\n // Set other users' value on the initial call\r\n if (self.backingFields._otherUsersResourcePoolRateTotal === null) {\r\n self.setOtherUsersResourcePoolRateTotal();\r\n }\r\n\r\n return self.backingFields._otherUsersResourcePoolRateTotal;\r\n }\r\n\r\n function resourcePoolRate() {\r\n\r\n if (self.backingFields._resourcePoolRate === null) {\r\n self.setResourcePoolRate(false);\r\n }\r\n\r\n return self.backingFields._resourcePoolRate;\r\n }\r\n\r\n function resourcePoolRateAverage() {\r\n\r\n if (self.resourcePoolRateCount() === null) {\r\n return null;\r\n }\r\n\r\n return self.resourcePoolRateCount() === 0 ?\r\n 0 :\r\n self.resourcePoolRateTotal() / self.resourcePoolRateCount();\r\n }\r\n\r\n function resourcePoolRateCount() {\r\n return self.UseFixedResourcePoolRate ?\r\n self.currentUserResourcePool() !== null && self.currentUserResourcePool().UserId === self.UserId ? // If it belongs to current user\r\n 1 :\r\n self.otherUsersResourcePoolRateCount() :\r\n self.otherUsersResourcePoolRateCount() + 1; // There is always default value, increase count by 1\r\n }\r\n\r\n function resourcePoolRatePercentage() {\r\n\r\n if (self.backingFields._resourcePoolRatePercentage === null) {\r\n self.setResourcePoolRatePercentage(false);\r\n }\r\n\r\n return self.backingFields._resourcePoolRatePercentage;\r\n }\r\n\r\n function resourcePoolRateTotal() {\r\n return self.UseFixedResourcePoolRate ?\r\n self.currentUserResourcePool() !== null && self.currentUserResourcePool().UserId === self.UserId ? // If it belongs to current user\r\n self.currentUserResourcePoolRate() :\r\n self.otherUsersResourcePoolRateTotal() :\r\n self.otherUsersResourcePoolRateTotal() + self.currentUserResourcePoolRate();\r\n }\r\n\r\n function selectedElement(value) {\r\n\r\n // Set new value\r\n if (typeof value !== 'undefined' && self.backingFields._selectedElement !== value) {\r\n self.backingFields._selectedElement = value;\r\n }\r\n\r\n // If there is no existing value (initial state), use mainElement() as the selected\r\n if (self.backingFields._selectedElement === null && self.mainElement()) {\r\n self.backingFields._selectedElement = self.mainElement();\r\n }\r\n\r\n return self.backingFields._selectedElement;\r\n }\r\n\r\n function setCurrentUserResourcePoolRate(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = self.currentUserResourcePool() !== null ?\r\n self.currentUserResourcePool().ResourcePoolRate :\r\n 10; // Default value?\r\n\r\n if (self.backingFields._currentUserResourcePoolRate !== value) {\r\n self.backingFields._currentUserResourcePoolRate = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.setResourcePoolRate();\r\n }\r\n }\r\n }\r\n\r\n function setOtherUsersResourcePoolRateCount() {\r\n\r\n self.backingFields._otherUsersResourcePoolRateCount = self.ResourcePoolRateCount;\r\n\r\n // Exclude current user's\r\n if (self.currentUserResourcePool() !== null) {\r\n self.backingFields._otherUsersResourcePoolRateCount--;\r\n }\r\n }\r\n\r\n function setOtherUsersResourcePoolRateTotal() {\r\n self.backingFields._otherUsersResourcePoolRateTotal = self.ResourcePoolRateTotal !== null ?\r\n self.ResourcePoolRateTotal :\r\n 0;\r\n\r\n // Exclude current user's\r\n if (self.currentUserResourcePool() !== null) {\r\n self.backingFields._otherUsersResourcePoolRateTotal -= self.currentUserResourcePool().ResourcePoolRate;\r\n }\r\n }\r\n\r\n function setResourcePoolRate(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value;\r\n\r\n if (self.UseFixedResourcePoolRate) {\r\n value = self.resourcePoolRateAverage();\r\n } else {\r\n switch (self.RatingMode) {\r\n case 1: { value = self.currentUserResourcePoolRate(); break; } // Current user's\r\n case 2: { value = self.resourcePoolRateAverage(); break; } // All\r\n }\r\n }\r\n\r\n if (self.backingFields._resourcePoolRate !== value) {\r\n self.backingFields._resourcePoolRate = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.setResourcePoolRatePercentage();\r\n }\r\n }\r\n }\r\n\r\n function setResourcePoolRatePercentage(updateRelated) {\r\n updateRelated = typeof updateRelated === 'undefined' ? true : updateRelated;\r\n\r\n var value = self.resourcePoolRate() === 0 ?\r\n 0 :\r\n self.resourcePoolRate() / 100;\r\n\r\n if (self.backingFields._resourcePoolRatePercentage !== value) {\r\n self.backingFields._resourcePoolRatePercentage = value;\r\n\r\n // Update related\r\n if (updateRelated) {\r\n self.ElementSet.forEach(function (element) {\r\n\r\n element.ElementItemSet.forEach(function (item) {\r\n item.setResourcePoolAmount();\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n function toggleRatingMode() {\r\n self.RatingMode = self.RatingMode === 1 ? 2 : 1;\r\n }\r\n\r\n // TOOD Should be obsolete if we could start using \"auto save anonymous user\"\r\n function updateAnonymousEntities() {\r\n\r\n if (!self.isAdded()) {\r\n return;\r\n }\r\n\r\n // Turn the flag off\r\n self.isAdded(false);\r\n\r\n // Resource pool itself\r\n self.entityAspect.setAdded();\r\n\r\n // User resource pools\r\n self.UserResourcePoolSet.forEach(function (userResourcePool) {\r\n userResourcePool.entityAspect.setAdded();\r\n });\r\n\r\n // Elements\r\n self.ElementSet.forEach(function (element) {\r\n element.entityAspect.setAdded();\r\n\r\n // Fields\r\n element.ElementFieldSet.forEach(function (elementField) {\r\n elementField.entityAspect.setAdded();\r\n\r\n // User element fields\r\n elementField.UserElementFieldSet.forEach(function (userElementField) {\r\n userElementField.entityAspect.setAdded();\r\n });\r\n });\r\n\r\n // Items\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n elementItem.entityAspect.setAdded();\r\n\r\n // Cells\r\n elementItem.ElementCellSet.forEach(function (elementCell) {\r\n elementCell.entityAspect.setAdded();\r\n\r\n // User cells\r\n elementCell.UserElementCellSet.forEach(function (userElementCell) {\r\n userElementCell.entityAspect.setAdded();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n // TODO Most of these functions are related with userService.js - updateX functions\r\n // Try to merge these two - Actually try to handle these actions within the related entity / SH - 27 Nov. '15\r\n function updateCache() {\r\n\r\n var isUnchanged = false;\r\n\r\n self.setCurrentUserResourcePoolRate();\r\n\r\n // Elements\r\n if (typeof self.ElementSet !== 'undefined') {\r\n self.ElementSet.forEach(function (element) {\r\n\r\n // TODO Review this later / SH - 24 Nov. '15\r\n element.setElementFieldIndexSet();\r\n\r\n // Fields\r\n if (typeof element.ElementFieldSet !== 'undefined') {\r\n element.ElementFieldSet.forEach(function (field) {\r\n\r\n if (field.IndexEnabled) {\r\n // TODO Actually index rating can't be set through resourcePoolEdit page and no need to update this cache\r\n // But still keep it as a reminder? / SH - 29 Nov. '15\r\n field.setCurrentUserIndexRating();\r\n }\r\n\r\n // Cells\r\n if (typeof field.ElementCellSet !== 'undefined') {\r\n field.ElementCellSet.forEach(function (cell) {\r\n\r\n switch (cell.ElementField.DataType) {\r\n case 1: {\r\n // TODO Again what a mess!\r\n // StringValue is a computed value, it should normally come from the server\r\n // But in case resource pool was just created, then it should be directly set like this.\r\n // Otherwise, it doesn't show its value on editor.\r\n // And on top of it, since it changes, breeze thinks that 'cell' is modified and tries to send it server\r\n // which results an error. So that's why modified check & acceptChanges parts were added.\r\n // SH - 01 Dec. '15\r\n if (cell.UserElementCellSet.length > 0) {\r\n isUnchanged = cell.entityAspect.entityState.isUnchanged();\r\n cell.StringValue = cell.UserElementCellSet[0].StringValue;\r\n if (isUnchanged) { cell.entityAspect.acceptChanges(); }\r\n }\r\n break;\r\n }\r\n case 2:\r\n case 3:\r\n case 4:\r\n // TODO DateTime?\r\n {\r\n cell.setCurrentUserNumericValue();\r\n break;\r\n }\r\n case 11:\r\n {\r\n // TODO DirectIncome is always calculated from NumericValueTotal\r\n // Which is actually not correct but till that its fixed, update it like this / SH - 29 Nov. '15\r\n // Also check 'What a mess' of StringValue\r\n if (cell.UserElementCellSet.length > 0) {\r\n isUnchanged = cell.entityAspect.entityState.isUnchanged();\r\n cell.NumericValueTotal = cell.UserElementCellSet[0].DecimalValue;\r\n if (isUnchanged) { cell.entityAspect.acceptChanges(); }\r\n }\r\n\r\n cell.setCurrentUserNumericValue();\r\n break;\r\n }\r\n case 12:\r\n {\r\n cell.ElementItem.setMultiplier();\r\n\r\n if (cell.ElementField.IndexEnabled) {\r\n cell.setNumericValueMultiplied();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'User';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', userFactory]);\r\n\r\n function userFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Return\r\n return User;\r\n\r\n function User() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.Id = 0;\r\n self.Email = '';\r\n self.EmailConfirmed = false;\r\n self.UserName = '';\r\n self.FirstName = '';\r\n self.MiddleName = '';\r\n self.LastName = '';\r\n self.PhoneNumber = '';\r\n self.PhoneNumberConfirmed = false;\r\n self.TwoFactorEnabled = false;\r\n self.AccessFailedCount = 0;\r\n self.LockoutEnabled = false;\r\n self.LockoutEndDateUtc = null;\r\n self.Notes = '';\r\n self.CreatedOn = new Date();\r\n self.ModifiedOn = new Date();\r\n self.DeletedOn = null;\r\n // TODO breezejs - Cannot assign a navigation property in an entity ctor\r\n //self.Claims = null;\r\n //self.Logins = [];\r\n //self.Roles = [];\r\n\r\n // Client-side\r\n self.isEditing = false;\r\n\r\n // Functions\r\n self.getEntities = getEntities;\r\n self.hasPassword = hasPassword;\r\n self.isAuthenticated = isAuthenticated;\r\n\r\n /*** Implementations ***/\r\n\r\n function getEntities() {\r\n\r\n var entities = [];\r\n\r\n entities.push(self);\r\n\r\n self.ResourcePoolSet.forEach(function (resourcePool) {\r\n var resourcePoolEntities = resourcePool.getEntities(); // TODO Probably there is an easier way to do this?\r\n resourcePoolEntities.forEach(function (entity) {\r\n entities.push(entity);\r\n });\r\n });\r\n\r\n // TODO Other user related entities?\r\n\r\n return entities;\r\n }\r\n\r\n function hasPassword() {\r\n if (typeof self.Claims === 'undefined') {\r\n throw new Error('Invalid operation: Claims is undefined');\r\n }\r\n\r\n for (var i = 0; i < self.Claims.length; i++) {\r\n var claim = self.Claims[i];\r\n if (claim.ClaimType === 'HasNoPassword') {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function isAuthenticated() {\r\n return self.Id > 0;\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'UserElementCell';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', userElementCellFactory]);\r\n\r\n function userElementCellFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Properties\r\n Object.defineProperty(UserElementCell.prototype, 'DecimalValue', {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () { return this.backingFields._DecimalValue; },\r\n set: function (value) {\r\n if (this.backingFields._DecimalValue !== value) {\r\n this.backingFields._DecimalValue = value;\r\n }\r\n }\r\n });\r\n\r\n // Return\r\n return UserElementCell;\r\n\r\n function UserElementCell() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.UserId = 0;\r\n self.ElementCellId = 0;\r\n self.StringValue = null;\r\n self.BooleanValue = null;\r\n self.IntegerValue = null;\r\n // \r\n self.DateTimeValue = null;\r\n\r\n // Local variables\r\n self.backingFields = {\r\n _DecimalValue: null\r\n };\r\n self.isEditing = false;\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'UserElementField';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', userElementFieldFactory]);\r\n\r\n function userElementFieldFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Return\r\n return UserElementField;\r\n\r\n function UserElementField() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.UserId = 0;\r\n self.ElementFieldId = 0;\r\n self.Rating = 0;\r\n\r\n // Local variables\r\n self.isEditing = false;\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'UserResourcePool';\r\n angular.module('main')\r\n .factory(factoryId, ['logger', userResourcePoolFactory]);\r\n\r\n function userResourcePoolFactory(logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Return\r\n return UserResourcePool;\r\n\r\n function UserResourcePool() {\r\n\r\n var self = this;\r\n\r\n // Server-side\r\n self.UserId = 0;\r\n self.ResourcePoolId = 0;\r\n self.ResourcePoolRate = 0;\r\n\r\n // Local variables\r\n self.isEditing = false;\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'applicationFactory';\r\n angular.module('main')\r\n .factory(factoryId, ['$http', '$q', 'serviceAppUrl', 'logger', applicationFactory]);\r\n\r\n function applicationFactory($http, $q, serviceAppUrl, logger) {\r\n logger = logger.forSource(factoryId);\r\n\r\n var applicationInfoUrl = serviceAppUrl + '/api/Application/ApplicationInfo';\r\n var applicationInfo = null;\r\n\r\n // Factory methods\r\n var factory = {\r\n getApplicationInfo: getApplicationInfo\r\n };\r\n\r\n return factory;\r\n\r\n /*** Implementations ***/\r\n\r\n function getApplicationInfo() {\r\n\r\n var deferred = $q.defer();\r\n\r\n if (applicationInfo !== null) {\r\n deferred.resolve(applicationInfo);\r\n }\r\n else {\r\n $http.get(applicationInfoUrl)\r\n .success(function (data) {\r\n applicationInfo = data;\r\n deferred.resolve(applicationInfo);\r\n })\r\n .error(function (data, status, headers, config) {\r\n // TODO Check this approach? - Just return 'Something went wrong'?\r\n deferred.reject({ data: data, status: status, headers: headers, config: config });\r\n });\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n})();\r\n","/***\r\n * Service: dataContext \r\n *\r\n * Handles all persistence and creation/deletion of app entities\r\n * using BreezeJS.\r\n *\r\n ***/\r\n(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'dataContext';\r\n angular.module('main')\r\n .factory(factoryId, ['entityManagerFactory', '$q', '$rootScope', '$timeout', 'logger', dataContext]);\r\n\r\n function dataContext(entityManagerFactory, $q, $rootScope, $timeout, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // Manager\r\n var currentUser = { isAuthenticated: function () { return false; } };\r\n var manager = null;\r\n var metadataReadyPromise = null;\r\n var saveTimer = null;\r\n\r\n // Factory methods\r\n var factory = {\r\n clear: clear,\r\n createEntity: createEntity,\r\n executeQuery: executeQuery,\r\n fetchEntityByKey: fetchEntityByKey,\r\n getChanges: getChanges,\r\n getChangesCount: getChangesCount,\r\n getEntities: getEntities,\r\n hasChanges: hasChanges,\r\n metadataReady: metadataReady,\r\n rejectChanges: rejectChanges,\r\n saveChanges: saveChanges,\r\n saveChangesAlt: saveChangesAlt,\r\n updateAnonymousChanges: updateAnonymousChanges\r\n };\r\n\r\n // Event handlers\r\n $rootScope.$on('ElementField_createUserElementCell', createUserElementCell);\r\n $rootScope.$on('userFactory_currentUserChanged', currentUserChanged);\r\n\r\n _init();\r\n\r\n return factory;\r\n\r\n /*** Implementations ***/\r\n\r\n function _init() {\r\n manager = entityManagerFactory.newManager();\r\n }\r\n\r\n function clear() {\r\n manager.clear();\r\n }\r\n\r\n function createEntity(entityType, initialValues) {\r\n\r\n // All entities will be created in isEditing state by default\r\n if (typeof initialValues.isEditing === 'undefined') {\r\n initialValues.isEditing = true;\r\n }\r\n\r\n return manager.createEntity(entityType, initialValues);\r\n }\r\n\r\n function createUserElementCell(event, userElementCell) {\r\n return createEntity('UserElementCell', userElementCell);\r\n }\r\n\r\n function currentUserChanged(event, newUser) {\r\n currentUser = newUser;\r\n }\r\n\r\n function executeQuery(query) {\r\n return manager.executeQuery(query);\r\n }\r\n\r\n function fetchEntityByKey(typeName, keyValues, checkLocalCacheFirst) {\r\n return manager.fetchEntityByKey(typeName, keyValues, checkLocalCacheFirst);\r\n }\r\n\r\n function getChanges(entityTypeName, entityState) {\r\n entityTypeName = typeof entityTypeName !== 'undefined' ? entityTypeName : null;\r\n entityState = typeof entityState !== 'undefined' ? entityState : null;\r\n\r\n var all = manager.getChanges();\r\n var changes = [];\r\n\r\n // Filters\r\n all.forEach(function (change) {\r\n if (!change.isEditing &&\r\n (entityTypeName === null || change.entityType.shortName === entityTypeName) &&\r\n (entityState === null || change.entityAspect.entityState === entityState)) {\r\n changes.push(change);\r\n }\r\n });\r\n\r\n return changes;\r\n // return manager.getChanges();\r\n }\r\n\r\n function getChangesCount() {\r\n return getChanges().length;\r\n // return manager.getChanges().length;\r\n }\r\n\r\n function getEntities(entityTypes, entityStates) {\r\n return manager.getEntities(entityTypes, entityStates);\r\n }\r\n\r\n function hasChanges() {\r\n return manager.hasChanges();\r\n }\r\n\r\n function metadataReady() {\r\n\r\n if (metadataReadyPromise === null) {\r\n\r\n var deferred = $q.defer();\r\n\r\n metadataReadyPromise = deferred.promise;\r\n\r\n if (manager.metadataStore.isEmpty()) {\r\n manager.fetchMetadata()\r\n .then(function () {\r\n deferred.resolve();\r\n },\r\n function (error) {\r\n deferred.reject(error);\r\n });\r\n } else {\r\n deferred.resolve();\r\n }\r\n }\r\n\r\n return metadataReadyPromise;\r\n }\r\n\r\n function rejectChanges() {\r\n manager.rejectChanges();\r\n }\r\n\r\n function saveChanges(delay) {\r\n delay = typeof delay !== 'undefined' ? delay : 0;\r\n\r\n // Anonymous user check\r\n if (!currentUser.isAuthenticated()) {\r\n $rootScope.$broadcast('anonymousUserInteracted');\r\n return $q.reject({});\r\n }\r\n\r\n // Cancel existing timers (delay the save)\r\n if (saveTimer !== null) {\r\n $timeout.cancel(saveTimer);\r\n }\r\n\r\n // Save immediately or wait based on delay\r\n if (delay === 0) {\r\n return saveChangesInternal();\r\n } else {\r\n saveTimer = $timeout(function () {\r\n saveChangesInternal();\r\n }, delay);\r\n return saveTimer;\r\n }\r\n\r\n // TODO Is it necessary to cancel the timer at the end of the service, like this ?\r\n\r\n //// When the DOM element is removed from the page,\r\n //// AngularJS will trigger the $destroy event on\r\n //// the scope. This gives us a chance to cancel any\r\n //// pending timer that we may have.\r\n //$scope.$on(\"$destroy\", function (event) {\r\n // $timeout.cancel(increaseMultiplierTimeoutInitial);\r\n // $timeout.cancel(increaseMultiplierTimeoutRecursive);\r\n //});\r\n }\r\n\r\n function saveChangesInternal() {\r\n\r\n var count = getChangesCount();\r\n var promise = null;\r\n var saveBatches = prepareSaveBatches();\r\n saveBatches.forEach(function (batch) {\r\n\r\n // ignore empty batches (except 'null' which means \"save everything else\")\r\n if (batch === null || batch.length > 0) {\r\n\r\n // Broadcast, so UI can block\r\n $rootScope.$broadcast('saveChangesStart');\r\n\r\n promise = promise ?\r\n promise.then(function () { return manager.saveChanges(batch); }) :\r\n manager.saveChanges(batch);\r\n }\r\n });\r\n\r\n // There is nothing to save?\r\n if (promise === null) {\r\n promise = $q.resolve(null);\r\n }\r\n\r\n return promise.then(success).catch(failed).finally(completed);\r\n\r\n function success(result) {\r\n logger.logSuccess('Saved ' + count + ' change(s)');\r\n return result;\r\n }\r\n\r\n function failed(error) {\r\n if (typeof error.status !== 'undefined' && error.status === '409') {\r\n logger.logError('Save failed!
The record you attempted to edit was modified by another user after you got the original value. The edit operation was canceled.', error, true);\r\n } else if (typeof error.entityErrors !== 'undefined') {\r\n\r\n var errorMessage = 'Save failed!
';\r\n\r\n for (var key in error.entityErrors) {\r\n var entityError = error.entityErrors[key];\r\n errorMessage += entityError.errorMessage + '
';\r\n }\r\n\r\n logger.logError(errorMessage, null, true);\r\n\r\n } else {\r\n logger.logError('Save failed!', error, true);\r\n }\r\n\r\n return $q.reject(error); // pass error along to next handler\r\n }\r\n\r\n function completed() {\r\n\r\n // Broadcast, so UI can unblock\r\n $rootScope.$broadcast('saveChangesCompleted');\r\n }\r\n\r\n function prepareSaveBatches() {\r\n\r\n var batches = [];\r\n\r\n // RowVersion fix\r\n // TODO How about Deleted state?\r\n var modifiedEntities = getChanges(null, breeze.EntityState.Modified);\r\n modifiedEntities.forEach(function (entity) {\r\n var rowVersion = entity.RowVersion;\r\n entity.RowVersion = '';\r\n entity.RowVersion = rowVersion;\r\n });\r\n batches.push(modifiedEntities);\r\n\r\n /* Aaargh! \r\n * Web API OData doesn't calculate the proper save order\r\n * which means, if we aren't careful on the client,\r\n * we could save a new TodoItem before we saved its parent new TodoList\r\n * or delete the parent TodoList before saving its deleted child TodoItems.\r\n * OData says it is up to the client to save entities in the order\r\n * required by referential constraints of the database.\r\n * While we could save each time you make a change, that sucks.\r\n * So we'll divvy up the pending changes into 4 batches\r\n * 1. Deleted Todos\r\n * 2. Deleted TodoLists\r\n * 3. Added TodoLists\r\n * 4. Every other change\r\n */\r\n\r\n batches.push(getChanges('UserElementCell', breeze.EntityState.Deleted));\r\n batches.push(getChanges('ElementCell', breeze.EntityState.Deleted));\r\n batches.push(getChanges('ElementItem', breeze.EntityState.Deleted));\r\n batches.push(getChanges('UserElementField', breeze.EntityState.Deleted));\r\n batches.push(getChanges('ElementField', breeze.EntityState.Deleted));\r\n batches.push(getChanges('Element', breeze.EntityState.Deleted));\r\n batches.push(getChanges('UserResourcePool', breeze.EntityState.Deleted));\r\n batches.push(getChanges('ResourcePool', breeze.EntityState.Deleted));\r\n\r\n batches.push(getChanges('ResourcePool', breeze.EntityState.Added));\r\n batches.push(getChanges('UserResourcePool', breeze.EntityState.Added));\r\n batches.push(getChanges('Element', breeze.EntityState.Added));\r\n batches.push(getChanges('ElementField', breeze.EntityState.Added));\r\n batches.push(getChanges('UserElementField', breeze.EntityState.Added));\r\n batches.push(getChanges('ElementItem', breeze.EntityState.Added));\r\n batches.push(getChanges('ElementCell', breeze.EntityState.Added));\r\n batches.push(getChanges('UserElementCell', breeze.EntityState.Added));\r\n\r\n // batches.push(null); // empty = save all remaining pending changes\r\n\r\n return batches;\r\n /*\r\n * No we can't flatten into one request because Web API OData reorders\r\n * arbitrarily, causing the database failure we're trying to avoid.\r\n */\r\n }\r\n }\r\n\r\n function saveChangesAlt(entities, delay) {\r\n delay = typeof delay !== 'undefined' ? delay : 0;\r\n\r\n // Anonymous user check\r\n if (!currentUser.isAuthenticated()) {\r\n $rootScope.$broadcast('anonymousUserInteracted');\r\n return $q.reject({});\r\n }\r\n\r\n // Cancel existing timers (delay the save)\r\n if (saveTimer !== null) {\r\n $timeout.cancel(saveTimer);\r\n }\r\n\r\n // Save immediately or wait based on delay\r\n if (delay === 0) {\r\n return saveChangesInternalAlt(entities);\r\n } else {\r\n saveTimer = $timeout(function () {\r\n saveChangesInternalAlt(entities);\r\n }, delay);\r\n return saveTimer;\r\n }\r\n\r\n // TODO Is it necessary to cancel the timer at the end of the service, like this ?\r\n\r\n //// When the DOM element is removed from the page,\r\n //// AngularJS will trigger the $destroy event on\r\n //// the scope. This gives us a chance to cancel any\r\n //// pending timer that we may have.\r\n //$scope.$on(\"$destroy\", function (event) {\r\n // $timeout.cancel(increaseMultiplierTimeoutInitial);\r\n // $timeout.cancel(increaseMultiplierTimeoutRecursive);\r\n //});\r\n }\r\n\r\n function saveChangesInternalAlt(entities) {\r\n\r\n var count = entities.length; // getChangesCount();\r\n var promise = null;\r\n var saveBatches = prepareSaveBatches(entities);\r\n saveBatches.forEach(function (batch) {\r\n\r\n // ignore empty batches (except 'null' which means \"save everything else\")\r\n if (batch === null || batch.length > 0) {\r\n\r\n // Broadcast, so UI can block\r\n $rootScope.$broadcast('saveChangesStart');\r\n\r\n promise = promise ?\r\n promise.then(function () { return manager.saveChanges(batch); }) :\r\n manager.saveChanges(batch);\r\n }\r\n });\r\n return promise.then(success).catch(failed).finally(completed);\r\n\r\n function success(result) {\r\n logger.logSuccess('Saved ' + count + ' change(s)');\r\n return result;\r\n }\r\n\r\n function failed(error) {\r\n if (typeof error.status !== 'undefined' && error.status === '409') {\r\n logger.logError('Save failed!
The record you attempted to edit was modified by another user after you got the original value. The edit operation was canceled.', error, true);\r\n } else if (typeof error.entityErrors !== 'undefined') {\r\n\r\n var errorMessage = 'Save failed!
';\r\n\r\n for (var key in error.entityErrors) {\r\n var entityError = error.entityErrors[key];\r\n errorMessage += entityError.errorMessage + '
';\r\n }\r\n\r\n logger.logError(errorMessage, null, true);\r\n\r\n } else {\r\n logger.logError('Save failed!', error, true);\r\n }\r\n\r\n return $q.reject(error); // pass error along to next handler\r\n }\r\n\r\n function completed() {\r\n\r\n // Broadcast, so UI can unblock\r\n $rootScope.$broadcast('saveChangesCompleted');\r\n }\r\n\r\n function prepareSaveBatches(entities) {\r\n\r\n var batches = [];\r\n\r\n // RowVersion fix\r\n // TODO How about Deleted state?\r\n var modifiedEntities = [];\r\n entities.forEach(function (entity) {\r\n if (entity.entityAspect.entityState.isModified()) {\r\n var rowVersion = entity.RowVersion;\r\n entity.RowVersion = '';\r\n entity.RowVersion = rowVersion;\r\n modifiedEntities.push(entity);\r\n }\r\n });\r\n batches.push(modifiedEntities);\r\n\r\n /* Aaargh! \r\n * Web API OData doesn't calculate the proper save order\r\n * which means, if we aren't careful on the client,\r\n * we could save a new TodoItem before we saved its parent new TodoList\r\n * or delete the parent TodoList before saving its deleted child TodoItems.\r\n * OData says it is up to the client to save entities in the order\r\n * required by referential constraints of the database.\r\n * While we could save each time you make a change, that sucks.\r\n * So we'll divvy up the pending changes into 4 batches\r\n * 1. Deleted Todos\r\n * 2. Deleted TodoLists\r\n * 3. Added TodoLists\r\n * 4. Every other change\r\n */\r\n\r\n batches.push(getEntities(entities, 'UserElementCell', breeze.EntityState.Deleted));\r\n batches.push(getEntities(entities, 'ElementCell', breeze.EntityState.Deleted));\r\n batches.push(getEntities(entities, 'ElementItem', breeze.EntityState.Deleted));\r\n batches.push(getEntities(entities, 'UserElementField', breeze.EntityState.Deleted));\r\n batches.push(getEntities(entities, 'ElementField', breeze.EntityState.Deleted));\r\n batches.push(getEntities(entities, 'Element', breeze.EntityState.Deleted));\r\n batches.push(getEntities(entities, 'UserResourcePool', breeze.EntityState.Deleted));\r\n batches.push(getEntities(entities, 'ResourcePool', breeze.EntityState.Deleted));\r\n\r\n batches.push(getEntities(entities, 'ResourcePool', breeze.EntityState.Added));\r\n batches.push(getEntities(entities, 'UserResourcePool', breeze.EntityState.Added));\r\n batches.push(getEntities(entities, 'Element', breeze.EntityState.Added));\r\n batches.push(getEntities(entities, 'ElementField', breeze.EntityState.Added));\r\n batches.push(getEntities(entities, 'UserElementField', breeze.EntityState.Added));\r\n batches.push(getEntities(entities, 'ElementItem', breeze.EntityState.Added));\r\n batches.push(getEntities(entities, 'ElementCell', breeze.EntityState.Added));\r\n batches.push(getEntities(entities, 'UserElementCell', breeze.EntityState.Added));\r\n\r\n function getEntities(entities, typeName, entityState) {\r\n var result = [];\r\n\r\n entities.forEach(function (entity) {\r\n if (entity.entityType.shortName === typeName && entity.entityAspect.entityState === entityState) {\r\n result.push(entity);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n // batches.push(null); // empty = save all remaining pending changes\r\n\r\n return batches;\r\n /*\r\n * No we can't flatten into one request because Web API OData reorders\r\n * arbitrarily, causing the database failure we're trying to avoid.\r\n */\r\n }\r\n }\r\n\r\n // When the user interact with the application without registering or login in,\r\n // it creates an anonymous user and all entity creations done by this user\r\n // If the user has actually an account and logs in afterwards, this function moves all those changes to that logged in user\r\n function updateAnonymousChanges(anonymousUser, newUser) {\r\n\r\n var deferred = $q.defer();\r\n\r\n if (typeof anonymousUser === 'undefined' || anonymousUser === null) {\r\n deferred.reject('anonymousUser parameter cannot be undefined or null');\r\n }\r\n\r\n if (typeof newUser === 'undefined' || newUser === null) {\r\n deferred.reject('newUser parameter cannot be undefined or null');\r\n }\r\n\r\n var existingEntityPromises = [];\r\n anonymousUser.UserResourcePoolSet.forEach(function (userResourcePool) {\r\n var keyValues = [newUser.Id, userResourcePool.ResourcePoolId];\r\n var promise = fetchEntityByKey('UserResourcePool', keyValues);\r\n existingEntityPromises.push(promise);\r\n });\r\n\r\n anonymousUser.UserElementFieldSet.forEach(function (userElementField) {\r\n var keyValues = [newUser.Id, userElementField.ElementFieldId];\r\n var promise = fetchEntityByKey('UserElementField', keyValues);\r\n existingEntityPromises.push(promise);\r\n });\r\n\r\n anonymousUser.UserElementCellSet.forEach(function (userElementCell) {\r\n var keyValues = [newUser.Id, userElementCell.ElementCellId];\r\n var promise = fetchEntityByKey('UserElementCell', keyValues);\r\n existingEntityPromises.push(promise);\r\n });\r\n\r\n $q.all(existingEntityPromises).then(function () {\r\n\r\n // Resource pools\r\n anonymousUser.ResourcePoolSet.forEach(function (anonymousResourcePool) {\r\n anonymousResourcePool.User = newUser;\r\n });\r\n\r\n // User resource pools\r\n var userResourcePoolSet = anonymousUser.UserResourcePoolSet.slice();\r\n userResourcePoolSet.forEach(function (anonymousUserResourcePool) {\r\n\r\n var result = newUser.UserResourcePoolSet.filter(function (userResourcePool) {\r\n return userResourcePool.ResourcePoolId === anonymousUserResourcePool.ResourcePoolId;\r\n });\r\n\r\n if (result.length > 0) { // If there is an existing entity, update it and remove the anonymous one\r\n result[0].ResourcePoolRate = anonymousUserResourcePool.ResourcePoolRate;\r\n anonymousUserResourcePool.entityAspect.rejectChanges();\r\n } else { // Otherwise update the anonymous one with the new user\r\n anonymousUserResourcePool.User = newUser;\r\n }\r\n });\r\n\r\n // User element fields\r\n var userElementFieldSet = anonymousUser.UserElementFieldSet.slice();\r\n userElementFieldSet.forEach(function (anonymousUserElementField) {\r\n\r\n // If existing entity, then make it modified\r\n var result = newUser.UserElementFieldSet.filter(function (userElementField) {\r\n return userElementField.ElementFieldId === anonymousUserElementField.ElementFieldId;\r\n });\r\n\r\n if (result.length > 0) { // If there is an existing entity, update it and remove the anonymous one\r\n result[0].Rating = anonymousUserElementField.Rating;\r\n anonymousUserElementField.entityAspect.rejectChanges();\r\n } else { // Otherwise update the anonymous one with the new user\r\n anonymousUserElementField.User = newUser;\r\n }\r\n });\r\n\r\n // User element cells\r\n var userElementCellSet = anonymousUser.UserElementCellSet.slice();\r\n userElementCellSet.forEach(function (anonymousUserElementCell) {\r\n\r\n // If existing entity, then make it modified\r\n var result = newUser.UserElementCellSet.filter(function (userElementCell) {\r\n return userElementCell.ElementCellId === anonymousUserElementCell.ElementCellId;\r\n });\r\n\r\n if (result.length > 0) { // If there is an existing entity, update it and remove the anonymous one\r\n result[0].StringValue = anonymousUserElementCell.StringValue;\r\n result[0].BooleanValue = anonymousUserElementCell.BooleanValue;\r\n result[0].IntegerValue = anonymousUserElementCell.IntegerValue;\r\n result[0].DecimalValue = anonymousUserElementCell.DecimalValue;\r\n result[0].DateTimeValue = anonymousUserElementCell.DateTimeValue;\r\n anonymousUserElementCell.entityAspect.rejectChanges();\r\n } else { // Otherwise update the anonymous one with the new user\r\n anonymousUserElementCell.User = newUser;\r\n }\r\n });\r\n\r\n // Remove the old (anonymous) user\r\n anonymousUser.entityAspect.rejectChanges();\r\n\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n }\r\n})();","/***\r\n * Service: entityManagerFactory \r\n *\r\n * Configures BreezeJS and creates new instance(s) of the \r\n * BreezeJS EntityManager for use in a 'dataContext' service\r\n *\r\n ***/\r\n(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'entityManagerFactory';\r\n angular.module('main')\r\n .factory(factoryId, ['breeze',\r\n 'Element',\r\n 'ElementCell',\r\n 'ElementField',\r\n 'ElementItem',\r\n 'ResourcePool',\r\n 'User',\r\n 'UserElementCell',\r\n 'UserElementField',\r\n 'UserResourcePool',\r\n '$rootScope',\r\n 'serviceAppUrl',\r\n 'logger',\r\n entityManagerFactory]);\r\n\r\n function entityManagerFactory(breeze,\r\n Element,\r\n ElementCell,\r\n ElementField,\r\n ElementItem,\r\n ResourcePool,\r\n User,\r\n UserElementCell,\r\n UserElementField,\r\n UserResourcePool,\r\n $rootScope,\r\n serviceAppUrl,\r\n logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // var serviceRoot = window.location.protocol + '//localhost:15001/';\r\n var serviceRoot = serviceAppUrl;\r\n var serviceName = serviceRoot + '/odata';\r\n var factory = {\r\n newManager: newManager,\r\n serviceName: serviceName\r\n };\r\n\r\n return factory;\r\n\r\n function newManager() {\r\n var manager = new breeze.EntityManager(serviceName);\r\n var store = manager.metadataStore;\r\n\r\n store.registerEntityTypeCtor('Element', Element);\r\n store.registerEntityTypeCtor('ElementCell', ElementCell);\r\n store.registerEntityTypeCtor('ElementField', ElementField);\r\n store.registerEntityTypeCtor('ElementItem', ElementItem);\r\n store.registerEntityTypeCtor('ResourcePool', ResourcePool);\r\n store.registerEntityTypeCtor('User', User);\r\n store.registerEntityTypeCtor('UserElementCell', UserElementCell);\r\n store.registerEntityTypeCtor('UserElementField', UserElementField);\r\n store.registerEntityTypeCtor('UserResourcePool', UserResourcePool);\r\n\r\n return manager;\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'locationHistory';\r\n angular.module('main')\r\n .factory(factoryId, ['resourcePoolFactory', '$q', 'logger', locationHistory]);\r\n\r\n function locationHistory(resourcePoolFactory, $q, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n var self = {\r\n history: [new LocationItem('/')],\r\n historyLimit: 10\r\n };\r\n\r\n var factory = {\r\n createItem: createItem,\r\n getHistory: getHistory,\r\n previousItem: previousItem\r\n };\r\n\r\n // Return\r\n return factory;\r\n\r\n /*** Implementations ***/\r\n\r\n function createItem($location, $routeCurrent) {\r\n\r\n var deferred = $q.defer();\r\n\r\n // TODO Try to use only routeCurrent?\r\n var itemUrl = $location.url();\r\n var accessType = $routeCurrent.accessType;\r\n var resourcePoolId = $routeCurrent.params.resourcePoolId;\r\n var isEdit = $location.path().substring($location.path().lastIndexOf('/') + 1) === 'edit';\r\n\r\n if (typeof resourcePoolId !== 'undefined') {\r\n resourcePoolFactory.getResourcePool(resourcePoolId).then(createItemInternal);\r\n } else {\r\n createItemInternal();\r\n }\r\n\r\n function createItemInternal(resourcePool) {\r\n var item = new LocationItem(itemUrl, accessType, resourcePool, isEdit);\r\n self.history.push(item);\r\n\r\n // Only keep limited number of items\r\n if (self.history.length > self.historyLimit) {\r\n self.history.splice(0, self.history.length - self.historyLimit);\r\n }\r\n\r\n deferred.resolve();\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n function getHistory() {\r\n return self.history.slice();\r\n }\r\n\r\n function previousItem(excludeAccessType) {\r\n excludeAccessType = typeof excludeAccessType !== 'undefined' ? excludeAccessType : '';\r\n\r\n for (var i = self.history.length - 2; i >= 0; i--) {\r\n var item = self.history[i];\r\n\r\n if (excludeAccessType === '' || excludeAccessType !== item.accessType) {\r\n return item;\r\n }\r\n }\r\n }\r\n\r\n function LocationItem(itemUrl, accessType, resourcePool, isEdit) {\r\n itemUrl = typeof itemUrl !== 'undefined' ? itemUrl : '';\r\n accessType = typeof accessType !== 'undefined' ? accessType : 'undefined';\r\n resourcePool = typeof resourcePool !== 'undefined' ? resourcePool : null;\r\n isEdit = typeof isEdit !== 'undefined' ? isEdit : false;\r\n\r\n var self = this;\r\n self.itemUrl = itemUrl;\r\n self.accessType = accessType;\r\n self.resourcePool = resourcePool;\r\n self.isEdit = isEdit;\r\n self.url = url;\r\n\r\n function url() {\r\n return self.resourcePool !== null ?\r\n self.isEdit ?\r\n '/_system/resourcePool/' + self.resourcePool.Id + '/edit' :\r\n '/_system/resourcePool/' + self.resourcePool.Id :\r\n self.itemUrl;\r\n }\r\n }\r\n }\r\n})();","/***\r\n * Service: logger \r\n *\r\n * Provides semantic logging services with help of\r\n * Angular's $log service that writes to the console and\r\n * John Papa's 'toastr.js': https://github.com/CodeSeven/toastr\r\n *\r\n ***/\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .factory('logger', ['$log', logger]);\r\n\r\n function logger($log) {\r\n configureToastr();\r\n\r\n var factory = {\r\n forSource: forSource,\r\n log: log,\r\n logError: logError,\r\n logInfo: logInfo,\r\n logSuccess: logSuccess,\r\n logWarning: logWarning\r\n };\r\n\r\n return factory;\r\n\r\n function configureToastr() {\r\n toastr.options = {\r\n \"positionClass\": \"toast-bottom-right\"\r\n };\r\n }\r\n\r\n function forSource(src) {\r\n return {\r\n log: function (m, d, s, t, o) { return log(m, d, src, s, t, o); },\r\n logError: function (m, d, s, t, o) { return logError(m, d, src, s, t, o); },\r\n logInfo: function (m, d, s, t, o) { return logInfo(m, d, src, s, t, o); },\r\n logSuccess: function (m, d, s, t, o) { return logSuccess(m, d, src, s, t, o); },\r\n logWarning: function (m, d, s, t, o) { return logWarning(m, d, src, s, t, o); },\r\n };\r\n }\r\n\r\n function log(message, data, source, showToast, title, optionsOverride) {\r\n return logIt(message, data, source, showToast, title, optionsOverride, 'debug');\r\n }\r\n\r\n function logError(message, data, source, showToast, title, optionsOverride) {\r\n return logIt(message, data, source, showToast, title, optionsOverride, 'error');\r\n }\r\n\r\n function logInfo(message, data, source, showToast, title, optionsOverride) {\r\n return logIt(message, data, source, showToast, title, optionsOverride, 'info');\r\n }\r\n\r\n function logSuccess(message, data, source, showToast, title, optionsOverride) {\r\n return logIt(message, data, source, showToast, title, optionsOverride, 'success');\r\n }\r\n\r\n function logWarning(message, data, source, showToast, title, optionsOverride) {\r\n return logIt(message, data, source, showToast, title, optionsOverride, 'warning');\r\n }\r\n\r\n function logIt(message, data, source, showToast, title, optionsOverride, toastType) {\r\n showToast = typeof showToast === 'undefined' ? false : showToast;\r\n var currentDateTime = new Date().getHours() + ':' +\r\n new Date().getMinutes() + ':' +\r\n new Date().getSeconds();\r\n source = source ? '[' + source + '] ' : '';\r\n var write;\r\n switch (toastType) {\r\n case 'debug': write = $log.debug; break;\r\n case 'error': write = $log.error; break;\r\n case 'info': write = $log.info; break;\r\n case 'success': write = $log.log; break;\r\n case 'warning': write = $log.warn; break;\r\n }\r\n write(currentDateTime, source, message, data);\r\n var toast = null;\r\n if (showToast) {\r\n switch (toastType) {\r\n case 'debug': toast = toastr.info(message, title, optionsOverride); break;\r\n case 'error': toast = toastr.error(message, title, optionsOverride); break;\r\n case 'info': toast = toastr.info(message, title, optionsOverride); break;\r\n case 'success': toast = toastr.success(message, title, optionsOverride); break;\r\n case 'warning': toast = toastr.warning(message, title, optionsOverride); break;\r\n }\r\n }\r\n return toast;\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'resourcePoolFactory';\r\n angular.module('main')\r\n .config(['$provide', extendFactory]);\r\n\r\n function extendFactory($provide) {\r\n $provide.decorator(factoryId, ['$delegate', 'ResourcePool', 'Element', 'userFactory', 'dataContext', '$rootScope', 'logger', resourcePoolFactory]);\r\n }\r\n\r\n function resourcePoolFactory($delegate, ResourcePool, Element, userFactory, dataContext, $rootScope, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n var fetched = [];\r\n\r\n // Factory methods\r\n $delegate.acceptChanges = acceptChanges;\r\n $delegate.cancelResourcePool = cancelResourcePool;\r\n $delegate.copyResourcePool = copyResourcePool;\r\n $delegate.createElement = createElement;\r\n $delegate.createElementField = createElementField;\r\n $delegate.createElementItem = createElementItem;\r\n $delegate.createResourcePoolBasic = createResourcePoolBasic;\r\n $delegate.createResourcePoolDirectIncomeAndMultiplier = createResourcePoolDirectIncomeAndMultiplier;\r\n $delegate.createResourcePoolTwoElements = createResourcePoolTwoElements;\r\n $delegate.getResourcePoolExpanded = getResourcePoolExpanded;\r\n $delegate.removeElement = removeElement;\r\n $delegate.removeElementField = removeElementField;\r\n $delegate.removeElementItem = removeElementItem;\r\n $delegate.removeResourcePool = removeResourcePool;\r\n\r\n // User logged out\r\n $rootScope.$on('userFactory_currentUserChanged', function () {\r\n fetched = [];\r\n });\r\n\r\n return $delegate;\r\n\r\n /*** Implementations ***/\r\n\r\n function acceptChanges(resourcePool) {\r\n\r\n // Set isAdded flag to true, so before saving it to database,\r\n // we can replace resource pool and its child entities state back to 'isAdded'\r\n if (resourcePool.entityAspect.entityState.isAdded()) {\r\n resourcePool.isAdded(true);\r\n }\r\n\r\n // Resource pool itself\r\n resourcePool.entityAspect.acceptChanges();\r\n\r\n // If isAdded, then make it modified, so it be retrieved when getChanges() called\r\n if (resourcePool.isAdded()) {\r\n resourcePool.entityAspect.setModified();\r\n }\r\n\r\n // User resource pools\r\n resourcePool.UserResourcePoolSet.forEach(function (userResourcePool) {\r\n userResourcePool.entityAspect.acceptChanges();\r\n });\r\n\r\n // Elements\r\n resourcePool.ElementSet.forEach(function (element) {\r\n element.entityAspect.acceptChanges();\r\n\r\n // Fields\r\n element.ElementFieldSet.forEach(function (elementField) {\r\n elementField.entityAspect.acceptChanges();\r\n\r\n // User element fields\r\n elementField.UserElementFieldSet.forEach(function (userElementField) {\r\n userElementField.entityAspect.acceptChanges();\r\n });\r\n });\r\n\r\n // Items\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n elementItem.entityAspect.acceptChanges();\r\n\r\n // Cells\r\n elementItem.ElementCellSet.forEach(function (elementCell) {\r\n elementCell.entityAspect.acceptChanges();\r\n\r\n // User cells\r\n elementCell.UserElementCellSet.forEach(function (userElementCell) {\r\n userElementCell.entityAspect.acceptChanges();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n function cancelResourcePool(resourcePool) {\r\n\r\n // Resource pool itself\r\n resourcePool.entityAspect.rejectChanges();\r\n\r\n // User resource pools\r\n resourcePool.UserResourcePoolSet.forEach(function (userResourcePool) {\r\n userResourcePool.entityAspect.rejectChanges();\r\n });\r\n\r\n // Elements\r\n resourcePool.ElementSet.forEach(function (element) {\r\n element.entityAspect.rejectChanges();\r\n\r\n // Fields\r\n element.ElementFieldSet.forEach(function (elementField) {\r\n elementField.entityAspect.rejectChanges();\r\n\r\n // User element fields\r\n elementField.UserElementFieldSet.forEach(function (userElementField) {\r\n userElementField.entityAspect.rejectChanges();\r\n });\r\n });\r\n\r\n // Items\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n elementItem.entityAspect.rejectChanges();\r\n\r\n // Cells\r\n elementItem.ElementCellSet.forEach(function (elementCell) {\r\n elementCell.entityAspect.rejectChanges();\r\n\r\n // User cells\r\n elementCell.UserElementCellSet.forEach(function (userElementCell) {\r\n userElementCell.entityAspect.rejectChanges();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n function copyResourcePool(resourcePoolSource) {\r\n // TODO\r\n }\r\n\r\n function createElement(element) {\r\n return dataContext.createEntity('Element', element);\r\n }\r\n\r\n function createElementCell(elementCellInitial) {\r\n\r\n var elementCell = dataContext.createEntity('ElementCell', elementCellInitial);\r\n\r\n // User element cell\r\n if (elementCell.ElementField.DataType !== 6) {\r\n\r\n var userElementCell = {\r\n User: elementCell.ElementField.Element.ResourcePool.User,\r\n ElementCell: elementCell\r\n };\r\n\r\n switch (elementCell.ElementField.DataType) {\r\n case 1: { userElementCell.StringValue = ''; break; }\r\n case 2: { userElementCell.BooleanValue = false; break; }\r\n case 3: { userElementCell.IntegerValue = 0; break; }\r\n case 4: { userElementCell.DecimalValue = 50; break; }\r\n // TODO 5 (DateTime?)\r\n case 11: { userElementCell.DecimalValue = 100; break; }\r\n case 12: { userElementCell.DecimalValue = 0; break; }\r\n }\r\n\r\n dataContext.createEntity('UserElementCell', userElementCell);\r\n }\r\n\r\n return elementCell;\r\n }\r\n\r\n function createElementField(elementField) {\r\n\r\n elementField = dataContext.createEntity('ElementField', elementField);\r\n\r\n // Related cells\r\n elementField.Element.ElementItemSet.forEach(function (elementItem) {\r\n createElementCell({\r\n ElementField: elementField,\r\n ElementItem: elementItem\r\n });\r\n });\r\n\r\n return elementField;\r\n }\r\n\r\n function createElementItem(elementItem) {\r\n\r\n elementItem = dataContext.createEntity('ElementItem', elementItem);\r\n\r\n // Related cells\r\n elementItem.Element.ElementFieldSet.forEach(function (elementField) {\r\n createElementCell({\r\n ElementField: elementField,\r\n ElementItem: elementItem\r\n });\r\n });\r\n\r\n return elementItem;\r\n }\r\n\r\n function createResourcePoolBasic(initializeResourcePool) {\r\n initializeResourcePool = typeof initializeResourcePool !== 'undefined' ? initializeResourcePool : false;\r\n\r\n return userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n\r\n var resourcePoolRate = 10;\r\n\r\n var resourcePool = dataContext.createEntity('ResourcePool', {\r\n User: currentUser,\r\n Name: 'New CMRP',\r\n InitialValue: 100,\r\n UseFixedResourcePoolRate: true\r\n });\r\n\r\n dataContext.createEntity('UserResourcePool', {\r\n User: currentUser,\r\n ResourcePool: resourcePool,\r\n ResourcePoolRate: resourcePoolRate\r\n });\r\n\r\n var element = createElement({\r\n ResourcePool: resourcePool,\r\n Name: 'New element'\r\n });\r\n element.IsMainElement = true;\r\n\r\n // Importance field (index)\r\n var importanceField = createElementField({\r\n Element: element,\r\n Name: 'Importance',\r\n DataType: 4,\r\n UseFixedValue: false,\r\n IndexEnabled: true,\r\n IndexCalculationType: 2,\r\n IndexSortType: 1,\r\n SortOrder: 1\r\n });\r\n\r\n // Item 1\r\n var item1 = createElementItem({\r\n Element: element,\r\n Name: 'New item 1'\r\n });\r\n\r\n // Item 2\r\n var item2 = createElementItem({\r\n Element: element,\r\n Name: 'New item 2'\r\n });\r\n\r\n // Initialize\r\n if (initializeResourcePool) {\r\n resourcePool._init(true);\r\n }\r\n\r\n return resourcePool;\r\n });\r\n }\r\n\r\n function createResourcePoolDirectIncomeAndMultiplier(initializeResourcePool) {\r\n initializeResourcePool = typeof initializeResourcePool !== 'undefined' ? initializeResourcePool : false;\r\n\r\n return createResourcePoolBasic()\r\n .then(function (resourcePool) {\r\n\r\n // Convert Importance field to Sales Price field\r\n var salesPriceField = resourcePool.mainElement().ElementFieldSet[0];\r\n salesPriceField.Name = 'Sales Price';\r\n salesPriceField.DataType = 11;\r\n salesPriceField.UseFixedValue = true;\r\n salesPriceField.IndexEnabled = false;\r\n salesPriceField.IndexCalculationType = 0;\r\n salesPriceField.IndexSortType = 0;\r\n\r\n // Update Sales Price field cells\r\n var cell1 = salesPriceField.ElementCellSet[0];\r\n var cell2 = salesPriceField.ElementCellSet[1];\r\n\r\n // Number of Sales field\r\n var numberOfSalesField = createElementField({\r\n Element: resourcePool.mainElement(),\r\n Name: 'Number of Sales',\r\n DataType: 12,\r\n UseFixedValue: false,\r\n SortOrder: 2\r\n });\r\n\r\n if (initializeResourcePool) {\r\n resourcePool._init(true);\r\n }\r\n\r\n return resourcePool;\r\n });\r\n }\r\n\r\n function createResourcePoolTwoElements(initializeResourcePool) {\r\n initializeResourcePool = typeof initializeResourcePool !== 'undefined' ? initializeResourcePool : false;\r\n\r\n return createResourcePoolBasic()\r\n .then(function (resourcePool) {\r\n\r\n // Element 2 & items\r\n var element2 = resourcePool.ElementSet[0];\r\n element2.Name = 'Child';\r\n\r\n var element2Item1 = element2.ElementItemSet[0];\r\n var element2Item2 = element2.ElementItemSet[1];\r\n\r\n // Element 1\r\n var element1 = createElement({\r\n ResourcePool: resourcePool,\r\n Name: 'Parent'\r\n });\r\n element1.IsMainElement = true;\r\n\r\n // Child field (second element)\r\n var childField = createElementField({\r\n Element: element1,\r\n Name: 'Child',\r\n DataType: 6,\r\n SelectedElement: element2,\r\n UseFixedValue: true,\r\n SortOrder: 1\r\n });\r\n\r\n // Item 1\r\n var item1 = createElementItem({\r\n Element: element1,\r\n Name: 'Parent 1'\r\n });\r\n\r\n // Item 1 Cell\r\n item1.ElementCellSet[0].SelectedElementItem = element2Item1;\r\n\r\n // Item 2\r\n var item2 = createElementItem({\r\n Element: element1,\r\n Name: 'Parent 2'\r\n });\r\n\r\n // Item 2 Cell\r\n item2.ElementCellSet[0].SelectedElementItem = element2Item2;\r\n\r\n if (initializeResourcePool) {\r\n resourcePool._init(true);\r\n }\r\n\r\n return resourcePool;\r\n });\r\n }\r\n\r\n function getResourcePoolExpanded(resourcePoolId) {\r\n // TODO Other validations?\r\n resourcePoolId = Number(resourcePoolId);\r\n\r\n return userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n\r\n // Prepare the query\r\n var query = null;\r\n var isNewResourcePool = resourcePoolId <= 0; // Determines whether this is just created by this user, or an existing resource pool\r\n var fetchedEarlier = false;\r\n var fromServer = false;\r\n\r\n // If it's not newly created, check the fetched list\r\n if (!isNewResourcePool) {\r\n fetchedEarlier = fetched.some(function (fetchedId) {\r\n return resourcePoolId === fetchedId;\r\n });\r\n }\r\n\r\n fromServer = !isNewResourcePool && !fetchedEarlier;\r\n\r\n // Is authorized? No, then get only the public data, yes, then get include user's own records\r\n if (currentUser.isAuthenticated() || isNewResourcePool) {\r\n query = breeze.EntityQuery\r\n .from('ResourcePool')\r\n .expand('UserResourcePoolSet, ElementSet.ElementFieldSet.UserElementFieldSet, ElementSet.ElementItemSet.ElementCellSet.UserElementCellSet')\r\n .where('Id', 'eq', resourcePoolId);\r\n } else {\r\n query = breeze.EntityQuery\r\n .from('ResourcePool')\r\n .expand('ElementSet.ElementFieldSet, ElementSet.ElementItemSet.ElementCellSet')\r\n .where('Id', 'eq', resourcePoolId);\r\n }\r\n\r\n // From server or local?\r\n if (fromServer) {\r\n query = query.using(breeze.FetchStrategy.FromServer);\r\n }\r\n else {\r\n query = query.using(breeze.FetchStrategy.FromLocalCache);\r\n }\r\n\r\n return dataContext.executeQuery(query)\r\n .then(success)\r\n .catch(failed);\r\n\r\n function success(response) {\r\n\r\n // If there is no cmrp with this Id, return null\r\n if (response.results.length === 0) {\r\n return null;\r\n }\r\n\r\n // ResourcePool\r\n var resourcePool = response.results[0];\r\n\r\n // Init\r\n if (fromServer) {\r\n resourcePool._init();\r\n }\r\n\r\n // Add the record into fetched list\r\n fetched.push(resourcePool.Id);\r\n\r\n return resourcePool;\r\n }\r\n\r\n function failed(error) {\r\n var message = error.message || 'ResourcePool query failed';\r\n logger.logError(message, error, true);\r\n }\r\n });\r\n }\r\n\r\n function removeElement(element) {\r\n\r\n // Remove from selectedElement\r\n if (element.ResourcePool.selectedElement() === element) {\r\n element.ResourcePool.selectedElement(null);\r\n }\r\n\r\n // Related items\r\n var elementItemSet = element.ElementItemSet.slice();\r\n elementItemSet.forEach(function (elementItem) {\r\n removeElementItem(elementItem);\r\n });\r\n\r\n // Related fields\r\n var elementFieldSet = element.ElementFieldSet.slice();\r\n elementFieldSet.forEach(function (elementField) {\r\n removeElementField(elementField);\r\n });\r\n\r\n element.entityAspect.setDeleted();\r\n }\r\n\r\n function removeElementCell(elementCell) {\r\n\r\n // Related user cells\r\n var userElementCellSet = elementCell.UserElementCellSet.slice();\r\n userElementCellSet.forEach(function (userElementCell) {\r\n userElementCell.entityAspect.setDeleted();\r\n });\r\n\r\n elementCell.entityAspect.setDeleted();\r\n }\r\n\r\n function removeElementField(elementField) {\r\n\r\n // Related cells\r\n var elementCellSet = elementField.ElementCellSet.slice();\r\n elementCellSet.forEach(function (elementCell) {\r\n removeElementCell(elementCell);\r\n });\r\n\r\n // Related user element fields\r\n var userElementFieldSet = elementField.UserElementFieldSet.slice();\r\n userElementFieldSet.forEach(function (userElementField) {\r\n userElementField.entityAspect.setDeleted();\r\n });\r\n\r\n elementField.entityAspect.setDeleted();\r\n }\r\n\r\n function removeElementItem(elementItem) {\r\n\r\n // Related cells\r\n var elementCellSet = elementItem.ElementCellSet.slice();\r\n elementCellSet.forEach(function (elementCell) {\r\n removeElementCell(elementCell);\r\n });\r\n\r\n elementItem.entityAspect.setDeleted();\r\n }\r\n\r\n function removeResourcePool(resourcePool) {\r\n\r\n // Related elements\r\n var elementSet = resourcePool.ElementSet.slice();\r\n elementSet.forEach(function (element) {\r\n removeElement(element);\r\n });\r\n\r\n // Related user resource pools\r\n var userResourcePoolSet = resourcePool.UserResourcePoolSet.slice();\r\n userResourcePoolSet.forEach(function (userResourcePool) {\r\n userResourcePool.entityAspect.setDeleted();\r\n });\r\n\r\n resourcePool.entityAspect.setDeleted();\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'userFactory';\r\n angular.module('main')\r\n .config(['$provide', extendFactory]);\r\n\r\n function extendFactory($provide) {\r\n $provide.decorator(factoryId, ['$delegate', 'dataContext', '$http', '$q', '$rootScope', '$window', '$location', 'serviceAppUrl', 'logger', userFactory]);\r\n }\r\n\r\n function userFactory($delegate, dataContext, $http, $q, $rootScope, $window, $location, serviceAppUrl, logger) {\r\n logger = logger.forSource(factoryId);\r\n\r\n // Service urls\r\n var addPasswordUrl = serviceAppUrl + '/api/Account/AddPassword';\r\n var changeEmailUrl = serviceAppUrl + '/api/Account/ChangeEmail';\r\n var changePasswordUrl = serviceAppUrl + '/api/Account/ChangePassword';\r\n var confirmEmailUrl = serviceAppUrl + '/api/Account/ConfirmEmail';\r\n var currentUser = null;\r\n var getCurrentUserPromise = null;\r\n var registerUrl = serviceAppUrl + '/api/Account/Register';\r\n var resendConfirmationEmailUrl = serviceAppUrl + '/api/Account/ResendConfirmationEmail';\r\n var resetPasswordUrl = serviceAppUrl + '/api/Account/ResetPassword';\r\n var resetPasswordRequestUrl = serviceAppUrl + '/api/Account/ResetPasswordRequest';\r\n var tokenUrl = serviceAppUrl + '/api/Token';\r\n\r\n // Service methods\r\n $delegate.addPassword = addPassword;\r\n $delegate.changeEmail = changeEmail;\r\n $delegate.changePassword = changePassword;\r\n $delegate.confirmEmail = confirmEmail;\r\n $delegate.getCurrentUser = getCurrentUser;\r\n $delegate.getToken = getToken;\r\n $delegate.logout = logout;\r\n $delegate.register = register;\r\n $delegate.resendConfirmationEmail = resendConfirmationEmail;\r\n $delegate.resetPassword = resetPassword;\r\n $delegate.resetPasswordRequest = resetPasswordRequest;\r\n\r\n $delegate.updateElementMultiplier = updateElementMultiplier;\r\n $delegate.updateElementCellMultiplier = updateElementCellMultiplier;\r\n $delegate.updateElementCellNumericValue = updateElementCellNumericValue;\r\n $delegate.updateElementFieldIndexRating = updateElementFieldIndexRating;\r\n $delegate.updateResourcePoolRate = updateResourcePoolRate;\r\n\r\n _init();\r\n\r\n function _init() {\r\n getCurrentUser()\r\n .then(function () {\r\n broadcastUserChanged();\r\n });\r\n }\r\n\r\n return $delegate;\r\n\r\n /*** Implementations ***/\r\n\r\n function addPassword(addPasswordBindingModel) {\r\n return $http.post(addPasswordUrl, addPasswordBindingModel)\r\n .success(function (updatedUser) {\r\n\r\n // Remove 'HasNoPassword' claim\r\n var claimIndex = null;\r\n for (var i = 0; i < currentUser.Claims.length; i++) {\r\n if (currentUser.Claims[i].ClaimType === 'HasNoPassword') {\r\n claimIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n if (claimIndex === null) {\r\n // TODO throw error?\r\n }\r\n\r\n var claims = currentUser.Claims.splice(claimIndex, 1);\r\n claims[0].entityAspect.setDetached();\r\n\r\n // Sync RowVersion fields\r\n syncRowVersion(currentUser, updatedUser);\r\n })\r\n .error(handleErrorResult);\r\n }\r\n\r\n function changeEmail(changeEmailBindingModel) {\r\n return $http.post(changeEmailUrl, changeEmailBindingModel)\r\n .success(function (updatedUser) {\r\n\r\n currentUser.Email = updatedUser.Email;\r\n currentUser.EmailConfirmed = false;\r\n\r\n // Sync RowVersion fields\r\n syncRowVersion(currentUser, updatedUser);\r\n })\r\n .error(handleErrorResult);\r\n }\r\n\r\n function changePassword(changePasswordBindingModel) {\r\n return $http.post(changePasswordUrl, changePasswordBindingModel)\r\n .success(function (updatedUser) {\r\n // Sync RowVersion fields\r\n syncRowVersion(currentUser, updatedUser);\r\n })\r\n .error(handleErrorResult);\r\n }\r\n\r\n function confirmEmail(confirmEmailBindingModel) {\r\n return $http.post(confirmEmailUrl, confirmEmailBindingModel)\r\n .success(function (updatedUser) {\r\n\r\n currentUser.EmailConfirmed = true;\r\n\r\n // Sync RowVersion fields\r\n syncRowVersion(currentUser, updatedUser);\r\n })\r\n .error(handleErrorResult);\r\n }\r\n\r\n function getToken(email, password, rememberMe, tempToken, isRegister) {\r\n isRegister = typeof isRegister === 'undefined' ? false : isRegister;\r\n\r\n var deferred = $q.defer();\r\n\r\n var tokenData = 'grant_type=password' +\r\n '&username=' + email +\r\n '&password=' + password +\r\n '&rememberMe=' + rememberMe +\r\n '&tempToken=' + (typeof tempToken !== 'undefined' ? tempToken : '');\r\n\r\n $http.post(tokenUrl, tokenData, { 'Content-Type': 'application/x-www-form-urlencoded' })\r\n .success(function (token) {\r\n\r\n // Set token to the session\r\n $window.localStorage.setItem('token', angular.toJson(token));\r\n\r\n // Set currentUser as the old one.\r\n // In case if this is coming from login page, anonymous changes will be merged/copied into logged in user\r\n var oldUser = currentUser;\r\n\r\n getCurrentUser(!isRegister)\r\n .then(function () {\r\n\r\n if (isRegister) {\r\n\r\n // Raise logged in event\r\n broadcastUserChanged();\r\n\r\n // Update anonymous entities\r\n currentUser.ResourcePoolSet.forEach(function (resourcePool) {\r\n resourcePool.updateAnonymousEntities();\r\n });\r\n\r\n // Save the changes that's been done before the registration\r\n dataContext.saveChanges()\r\n .then(function () {\r\n deferred.resolve();\r\n });\r\n } else {\r\n\r\n // Raise logged in event\r\n broadcastUserChanged();\r\n\r\n // Move anonymously created entities to this logged in user\r\n dataContext.updateAnonymousChanges(oldUser, currentUser)\r\n .then(function () {\r\n\r\n // Update anonymous entities\r\n currentUser.ResourcePoolSet.forEach(function (resourcePool) {\r\n resourcePool.updateAnonymousEntities();\r\n });\r\n\r\n // Save changes\r\n dataContext.saveChanges()\r\n .then(function () {\r\n deferred.resolve();\r\n });\r\n });\r\n }\r\n });\r\n })\r\n .error(function (data, status, headers, config) {\r\n handleErrorResult(data, status, headers, config);\r\n deferred.reject(data);\r\n });\r\n\r\n return deferred.promise;\r\n }\r\n\r\n // Returns either anonymous (not authenticated) or logged in user\r\n function getCurrentUser(resetPromise) {\r\n resetPromise = typeof resetPromise !== 'undefined' ? resetPromise : false;\r\n\r\n if (getCurrentUserPromise === null || resetPromise) {\r\n\r\n var deferred = $q.defer();\r\n getCurrentUserPromise = deferred.promise;\r\n\r\n if (localStorage.getItem('token') === null) {\r\n\r\n dataContext.metadataReady()\r\n .then(function () {\r\n var user = dataContext.createEntity('User', { isEditing: false });\r\n currentUser = user;\r\n deferred.resolve(user);\r\n })\r\n .catch(function () {\r\n // TODO Handle?\r\n });\r\n\r\n } else {\r\n var query = breeze.EntityQuery\r\n .from('Users')\r\n .expand('Claims')\r\n .using(breeze.FetchStrategy.FromServer);\r\n\r\n dataContext.executeQuery(query)\r\n .then(success)\r\n .catch(failed);\r\n }\r\n }\r\n\r\n return getCurrentUserPromise;\r\n\r\n function success(response) {\r\n\r\n // If the response has an entity, use that, otherwise create an anonymous user\r\n var user = response.results.length > 0 ?\r\n response.results[0] :\r\n dataContext.createEntity('User', { isEditing: false });\r\n\r\n currentUser = user;\r\n deferred.resolve(user);\r\n }\r\n\r\n function failed(error) {\r\n var message = error.message || 'User query failed';\r\n // TODO Handle this case better!\r\n deferred.reject(message);\r\n throw new Error(message);\r\n }\r\n }\r\n\r\n function getUserElementCell(user, elementCell) {\r\n\r\n var userCell = elementCell.currentUserCell();\r\n\r\n if (userCell === null) {\r\n\r\n // Since there is a delay between client-side changes and actual save operation (editor.js - saveChanges(1500)), these entities might be deleted but not yet saved. \r\n // To prevent having the exception of creating an entity with the same keys twice, search 'deleted' ones and restore it back to life! / SH - 02 Dec. '15\r\n var deletedUserCells = dataContext.getEntities(['UserElementCell'], [breeze.EntityState.Deleted]);\r\n var userCells = deletedUserCells.filter(function (deletedUserCell) {\r\n return deletedUserCell.UserId === user.Id && deletedUserCell.ElementCellId === elementCell.Id;\r\n });\r\n\r\n if (userCells.length > 0) {\r\n userCell = userCells[0];\r\n userCell.entityAspect.rejectChanges();\r\n userCell.DecimalValue = elementCell.ElementField.DataType === 12 ? 0 : 50; // TODO ?\r\n }\r\n }\r\n\r\n return userCell;\r\n }\r\n\r\n function getUserElementField(user, elementField) {\r\n\r\n var userField = elementField.currentUserElementField();\r\n\r\n if (userField === null) {\r\n\r\n // Since there is a delay between client-side changes and actual save operation (editor.js - saveChanges(1500)), these entities might be deleted but not yet saved. \r\n // To prevent having the exception of creating an entity with the same keys twice, search 'deleted' ones and restore it back to life! / SH - 02 Dec. '15\r\n var deletedUserFields = dataContext.getEntities(['UserElementField'], [breeze.EntityState.Deleted]);\r\n var userFields = deletedUserFields.filter(function (deletedUserField) {\r\n return deletedUserField.UserId === user.Id && deletedUserField.ElementFieldId === elementField.Id;\r\n });\r\n\r\n if (userFields.length > 0) {\r\n userField = userFields[0];\r\n userField.entityAspect.rejectChanges();\r\n userField.Rating = 50;\r\n }\r\n }\r\n\r\n return userField;\r\n }\r\n\r\n function getUserResourcePool(user, resourcePool) {\r\n\r\n var userResourcePool = resourcePool.currentUserResourcePool();\r\n\r\n if (userResourcePool === null) {\r\n\r\n // Since there is a delay between client-side changes and actual save operation (editor.js - saveChanges(1500)), these entities might be deleted but not yet saved. \r\n // To prevent having the exception of creating an entity with the same keys twice, search 'deleted' ones and restore it back to life! / SH - 02 Dec. '15\r\n var deletedUserResourcePools = dataContext.getEntities(['UserResourcePool'], [breeze.EntityState.Deleted]);\r\n var userResourcePools = deletedUserResourcePools.filter(function (deletedUserResourcePool) {\r\n return deletedUserResourcePool.UserId === user.Id && deletedUserResourcePool.ResourcePoolId === resourcePool.Id;\r\n });\r\n\r\n if (userResourcePools.length > 0) {\r\n userResourcePool = userResourcePools[0];\r\n userResourcePool.entityAspect.rejectChanges();\r\n userResourcePool.ResourcePoolRate = 10;\r\n }\r\n }\r\n\r\n return userResourcePool;\r\n }\r\n\r\n function handleErrorResult(data, status, headers, config) {\r\n\r\n // TODO Can this be done on a higher level?\r\n var message = '';\r\n\r\n if (typeof data.ModelState !== 'undefined') {\r\n for (var key in data.ModelState) {\r\n var array = data.ModelState[key];\r\n array.forEach(addErrorMessage);\r\n }\r\n }\r\n\r\n function addErrorMessage(error) {\r\n message += error + '
';\r\n }\r\n\r\n if (message === '' && typeof data.Message !== 'undefined') {\r\n message = data.Message;\r\n }\r\n\r\n if (message === '' && typeof data.error_description !== 'undefined') {\r\n message = data.error_description;\r\n }\r\n\r\n logger.logError(message, null, true);\r\n }\r\n\r\n function logout() {\r\n\r\n // Remove token from the session\r\n $window.localStorage.removeItem('token');\r\n\r\n // Clear breeze's metadata store\r\n dataContext.clear();\r\n\r\n // Raise logged out event\r\n return getCurrentUser(true)\r\n .then(function () {\r\n broadcastUserChanged();\r\n });\r\n }\r\n\r\n function broadcastUserChanged() {\r\n $rootScope.$broadcast('userFactory_currentUserChanged', currentUser);\r\n }\r\n\r\n function register(registerBindingModel) {\r\n return $http.post(registerUrl, registerBindingModel)\r\n .success(function (newUser) {\r\n\r\n // breeze context user entity fix-up!\r\n // TODO Try to make this part better, use OData method?\r\n currentUser.Id = newUser.Id;\r\n currentUser.Email = newUser.Email;\r\n currentUser.UserName = newUser.UserName;\r\n currentUser.RowVersion = newUser.RowVersion;\r\n currentUser.entityAspect.acceptChanges();\r\n\r\n return getToken(registerBindingModel.email, registerBindingModel.password, false, true);\r\n })\r\n .error(handleErrorResult);\r\n }\r\n\r\n function resendConfirmationEmail() {\r\n return $http.post(resendConfirmationEmailUrl).error(handleErrorResult);\r\n }\r\n\r\n function resetPassword(resetPasswordBindingModel) {\r\n return $http.post(resetPasswordUrl, resetPasswordBindingModel)\r\n .success(function (updatedUser) {\r\n // Sync RowVersion fields\r\n syncRowVersion(currentUser, updatedUser);\r\n })\r\n .error(handleErrorResult);\r\n }\r\n\r\n function resetPasswordRequest(resetPasswordRequestBindingModel) {\r\n return $http.post(resetPasswordRequestUrl, resetPasswordRequestBindingModel).error(handleErrorResult);\r\n }\r\n\r\n // When an entity gets updated through angular, unlike breeze updates, it doesn't sync RowVersion automatically\r\n // After each update, call this function to sync the entities RowVersion with the server's. Otherwise it'll get Conflict error\r\n // SH - 05 Jan. '16\r\n function syncRowVersion(oldEntity, newEntity) {\r\n // TODO Validations?\r\n oldEntity.RowVersion = newEntity.RowVersion;\r\n }\r\n\r\n // These 'updateX' functions were defined in their related entities (user.js).\r\n // Only because they had to use createEntity() on dataContext, it was moved to this service.\r\n // Try do handle them in a better way, maybe by using broadcast?\r\n\r\n function updateElementMultiplier(element, updateType) {\r\n\r\n // Find user element cell\r\n element.ElementItemSet.forEach(function (item) {\r\n\r\n var multiplierCell;\r\n for (var cellIndex = 0; cellIndex < item.ElementCellSet.length; cellIndex++) {\r\n var elementCell = item.ElementCellSet[cellIndex];\r\n if (elementCell.ElementField.DataType === 12) {\r\n multiplierCell = elementCell;\r\n break;\r\n }\r\n }\r\n\r\n updateElementCellMultiplierInternal(multiplierCell, updateType);\r\n });\r\n\r\n // Update related\r\n\r\n // Update items\r\n element.ElementItemSet.forEach(function (item) {\r\n item.setMultiplier();\r\n });\r\n\r\n element.ElementFieldSet.forEach(function (field) {\r\n\r\n if (field.IndexEnabled) {\r\n // Update numeric value cells\r\n field.ElementCellSet.forEach(function (cell) {\r\n cell.setNumericValueMultiplied(false);\r\n });\r\n\r\n // Update fields\r\n field.setNumericValueMultiplied();\r\n }\r\n });\r\n }\r\n\r\n function updateElementCellMultiplier(elementCell, updateType) {\r\n\r\n updateElementCellMultiplierInternal(elementCell, updateType);\r\n\r\n // Update items\r\n elementCell.ElementField.Element.ElementItemSet.forEach(function (item) {\r\n item.setMultiplier();\r\n });\r\n\r\n if (elementCell.ElementField.IndexEnabled) {\r\n // Update numeric value cells\r\n elementCell.ElementField.ElementCellSet.forEach(function (cell) {\r\n cell.setNumericValueMultiplied(false);\r\n });\r\n\r\n // Update fields\r\n elementCell.ElementField.setNumericValueMultiplied();\r\n }\r\n }\r\n\r\n function updateElementCellMultiplierInternal(elementCell, updateType) {\r\n\r\n var userCell = getUserElementCell(currentUser, elementCell);\r\n\r\n switch (updateType) {\r\n case 'increase':\r\n case 'decrease': {\r\n\r\n if (userCell === null) { // If there is no item, create it\r\n\r\n userCell = dataContext.createEntity('UserElementCell', {\r\n User: currentUser,\r\n ElementCell: elementCell,\r\n DecimalValue: updateType === 'increase' ? 1 : 0,\r\n isEditing: false\r\n });\r\n\r\n } else { // If there is an item, update DecimalValue, but cannot be lower than zero\r\n\r\n userCell.DecimalValue = updateType === 'increase' ?\r\n userCell.DecimalValue + 1 :\r\n userCell.DecimalValue - 1 < 0 ? 0 : userCell.DecimalValue - 1;\r\n }\r\n\r\n break;\r\n }\r\n case 'reset': {\r\n\r\n if (userCell !== null) { // If there is an item, delete it\r\n userCell.entityAspect.setDeleted();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function updateElementCellNumericValue(elementCell, updateType) {\r\n\r\n var userCell = getUserElementCell(currentUser, elementCell);\r\n\r\n switch (updateType) {\r\n case 'increase':\r\n case 'decrease': {\r\n\r\n if (userCell === null) { // If there is no item, create it\r\n\r\n dataContext.createEntity('UserElementCell', {\r\n User: currentUser,\r\n ElementCell: elementCell,\r\n DecimalValue: updateType === 'increase' ? 55 : 45,\r\n isEditing: false\r\n });\r\n\r\n } else { // If there is an item, update DecimalValue, but cannot be smaller than zero and cannot be bigger than 100\r\n\r\n userCell.DecimalValue = updateType === 'increase' ?\r\n userCell.DecimalValue + 5 > 100 ? 100 : userCell.DecimalValue + 5 :\r\n userCell.DecimalValue - 5 < 0 ? 0 : userCell.DecimalValue - 5;\r\n }\r\n\r\n // Update the cached value\r\n elementCell.setCurrentUserNumericValue();\r\n\r\n break;\r\n }\r\n case 'reset': {\r\n\r\n if (userCell !== null) { // If there is an item, delete it\r\n userCell.entityAspect.setDeleted();\r\n\r\n // Update the cached value\r\n elementCell.setCurrentUserNumericValue();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function updateElementFieldIndexRating(elementField, updateType) {\r\n\r\n var userElementField = getUserElementField(currentUser, elementField);\r\n\r\n switch (updateType) {\r\n case 'increase':\r\n case 'decrease': {\r\n\r\n // If there is no item, create it\r\n if (userElementField === null) {\r\n userElementField = {\r\n User: currentUser,\r\n ElementField: elementField,\r\n Rating: updateType === 'increase' ? 55 : 45,\r\n isEditing: false\r\n };\r\n\r\n dataContext.createEntity('UserElementField', userElementField);\r\n\r\n } else { // If there is an item, update Rating, but cannot be smaller than zero and cannot be bigger than 100\r\n\r\n userElementField.Rating = updateType === 'increase' ?\r\n userElementField.Rating + 5 > 100 ? 100 : userElementField.Rating + 5 :\r\n userElementField.Rating - 5 < 0 ? 0 : userElementField.Rating - 5;\r\n }\r\n\r\n // Update the cached value\r\n elementField.setCurrentUserIndexRating();\r\n\r\n break;\r\n }\r\n case 'reset': {\r\n\r\n // If there is an item, delete it\r\n if (userElementField !== null) {\r\n userElementField.entityAspect.setDeleted();\r\n\r\n // Update the cached value\r\n elementField.setCurrentUserIndexRating();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function updateResourcePoolRate(resourcePool, updateType) {\r\n\r\n var userResourcePool = getUserResourcePool(currentUser, resourcePool);\r\n\r\n switch (updateType) {\r\n case 'increase':\r\n case 'decrease': {\r\n\r\n // If there is no item, create it\r\n if (userResourcePool === null) {\r\n userResourcePool = {\r\n User: currentUser,\r\n ResourcePool: resourcePool,\r\n ResourcePoolRate: updateType === 'increase' ? 15 : 5,\r\n isEditing: false\r\n };\r\n\r\n dataContext.createEntity('UserResourcePool', userResourcePool);\r\n\r\n } else { // If there is an item, update Rating, but cannot be smaller than zero and cannot be bigger than 1000\r\n\r\n userResourcePool.ResourcePoolRate = updateType === 'increase' ?\r\n userResourcePool.ResourcePoolRate + 5 > 1000 ? 1000 : userResourcePool.ResourcePoolRate + 5 :\r\n userResourcePool.ResourcePoolRate - 5 < 0 ? 0 : userResourcePool.ResourcePoolRate - 5;\r\n }\r\n\r\n // Update the cached value\r\n resourcePool.setCurrentUserResourcePoolRate();\r\n\r\n break;\r\n }\r\n case 'reset': {\r\n\r\n // If there is an item, delete it\r\n if (userResourcePool !== null) {\r\n userResourcePool.entityAspect.setDeleted();\r\n\r\n // Update the cached value\r\n resourcePool.setCurrentUserResourcePoolRate();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n})();\r\n","/***\r\n * Filter: enum\r\n *\r\n * Converts the enum value to its key by searching through tables in Enums.js\r\n *\r\n ***/\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .filter('enum', ['Enums', 'logger', function (Enums, logger) {\r\n\r\n return function (input, enumTableKey) {\r\n\r\n if (typeof input === 'undefined' || typeof enumTableKey === 'undefined' || enumTableKey === '') {\r\n return null;\r\n }\r\n\r\n return Enums.getEnumKey(enumTableKey, input);\r\n };\r\n }]);\r\n\r\n})();\r\n","/***\r\n * Filter: numberSymbol\r\n *\r\n * Convert the number to a short format with symbol format.\r\n *\r\n ***/\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .filter('numberSymbol', ['$filter', 'logger', function ($filter, logger) {\r\n return function (input, decimals) {\r\n\r\n if (typeof input === 'undefined')\r\n return null;\r\n\r\n decimals = typeof decimals === 'undefined' ? 0 : decimals;\r\n\r\n var number = Number(input);\r\n number = decimals > 0 ? number.toFixed(decimals) : number;\r\n var symbol = '';\r\n\r\n if (number / Math.pow(10, 12) >= 1) { // Trillion\r\n number = number / Math.pow(10, 12);\r\n symbol = 'T';\r\n } else if (number / Math.pow(10, 9) >= 1) { // Billion\r\n number = number / Math.pow(10, 9);\r\n symbol = 'B';\r\n } else if (number / Math.pow(10, 6) >= 1) { // Million\r\n number = number / Math.pow(10, 6);\r\n symbol = 'M';\r\n } else if (number / Math.pow(10, 3) >= 1) { // Thousand\r\n number = number / Math.pow(10, 3);\r\n symbol = 'K';\r\n } else {\r\n number = number;\r\n }\r\n\r\n return $filter('number')(number, decimals) + symbol;\r\n };\r\n }]);\r\n\r\n})();\r\n","/***\r\n * Filter: percentage\r\n *\r\n * Convert the number to a percentage format.\r\n *\r\n ***/\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('main')\r\n .filter('percentage', ['$filter', function ($filter) {\r\n return function (input, decimals) {\r\n // TODO Whether Percentage symbol should be in front or behind of the value differs based on cultural settings\r\n return $filter('number')(input * 100, decimals) + '%';\r\n };\r\n }]);\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'AccountEditController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', 'logger', AccountEditController]);\r\n\r\n function AccountEditController(userFactory, logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var isSaving = false;\r\n\r\n // Controller methods (alphabetically)\r\n var vm = this;\r\n vm.cancelChanges = cancelChanges;\r\n vm.isSaveDisabled = isSaveDisabled;\r\n vm.user = null;\r\n vm.saveChanges = saveChanges;\r\n\r\n // Get current user\r\n userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n vm.user = currentUser;\r\n vm.user.isEditing = true;\r\n });\r\n\r\n /*** Implementations ***/\r\n\r\n function cancelChanges() {\r\n // TODO\r\n }\r\n\r\n function isSaveDisabled() {\r\n //return isSaving || (!userFactory.hasChanges());\r\n return isSaving;\r\n }\r\n\r\n function saveChanges() {\r\n\r\n isSaving = true;\r\n vm.user.isEditing = false;\r\n userFactory.saveChanges()\r\n .then(function (result) {\r\n logger.logSuccess('Your changes have been saved!', null, true);\r\n })\r\n .catch(function (error) {\r\n\r\n // Conflict (Concurrency exception)\r\n if (error.status === '409') {\r\n // TODO Try to recover!\r\n }\r\n })\r\n .finally(function () {\r\n isSaving = false;\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'AddPasswordController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', '$location', 'logger', AddPasswordController]);\r\n\r\n function AddPasswordController(userFactory, $location, logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.addPassword = addPassword;\r\n\r\n function addPassword() {\r\n userFactory.addPassword(vm)\r\n .success(function () {\r\n $location.url('/');\r\n logger.logSuccess('Your password has been set!', null, true);\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ChangeEmailController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', '$location', 'logger', ChangeEmailController]);\r\n\r\n function ChangeEmailController(userFactory, $location, logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.isChangeEmailDisabled = false;\r\n vm.changeEmail = changeEmail;\r\n\r\n _init();\r\n\r\n function _init() {\r\n\r\n // Generate test data if localhost\r\n if ($location.host() === 'localhost') {\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n var month = now.getMonth() + 1;\r\n var day = now.getDate();\r\n var hour = now.getHours();\r\n var minute = now.getMinutes();\r\n var second = now.getSeconds();\r\n var email = 'local_' + year + month + day + '_' + hour + minute + second + '@forcrowd.org';\r\n\r\n vm.email = email;\r\n }\r\n }\r\n\r\n function changeEmail() {\r\n\r\n vm.isChangeEmailDisabled = true;\r\n\r\n userFactory.changeEmail(vm)\r\n .success(function () {\r\n $location.url('/_system/account/confirmEmail');\r\n })\r\n .finally(function () {\r\n vm.isChangeEmailDisabled = false;\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ChangePasswordController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', '$location', 'logger', ChangePasswordController]);\r\n\r\n function ChangePasswordController(userFactory, $location, logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.changePassword = changePassword;\r\n\r\n function changePassword() {\r\n userFactory.changePassword(vm)\r\n .success(function () {\r\n $location.url('/');\r\n logger.logSuccess('Your password has been changed!', null, true);\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ConfirmEmailController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', '$rootScope', '$location', 'logger', ConfirmEmailController]);\r\n\r\n function ConfirmEmailController(userFactory, $rootScope, $location, logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.currentUser = { EmailConfirmed: false, isAuthenticated: function () { return false; } };\r\n vm.isResendDisabled = false;\r\n vm.resendConfirmationEmail = resendConfirmationEmail;\r\n\r\n _init();\r\n\r\n /*** Implementations ***/\r\n\r\n function _init() {\r\n\r\n userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n\r\n vm.currentUser = currentUser;\r\n\r\n if (!vm.currentUser.isAuthenticated()) {\r\n return;\r\n }\r\n\r\n // If there is no token, no need to continue\r\n var token = $location.search().token;\r\n if (typeof token === 'undefined') {\r\n return;\r\n }\r\n\r\n userFactory.confirmEmail({ Token: token });\r\n });\r\n }\r\n\r\n function resendConfirmationEmail() {\r\n\r\n vm.isResendDisabled = true;\r\n\r\n userFactory.resendConfirmationEmail()\r\n .then(function () {\r\n logger.logSuccess('Confirmation email has been resent to your email address!', null, true);\r\n })\r\n .finally(function () {\r\n vm.isResendDisabled = false;\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'LoginController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', '$location', 'locationHistory', 'serviceAppUrl', 'logger', LoginController]);\r\n\r\n function LoginController(userFactory, $location, locationHistory, serviceAppUrl, logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.email = '';\r\n vm.login = login;\r\n vm.getExternalLoginUrl = getExternalLoginUrl;\r\n vm.password = '';\r\n vm.rememberMe = false;\r\n\r\n _init();\r\n\r\n function _init() {\r\n\r\n // Error\r\n var error = $location.search().error;\r\n if (typeof error !== 'undefined') {\r\n logger.logError(error, null, true);\r\n return;\r\n }\r\n\r\n login();\r\n }\r\n\r\n function login() {\r\n\r\n // External (temp token) login\r\n var tempToken = $location.search().tempToken;\r\n if (typeof tempToken !== 'undefined') {\r\n userFactory.getToken('', '', vm.rememberMe, tempToken).then(success).catch(failedExternal);\r\n } else { // Internal login\r\n if (vm.email !== '' && vm.password !== '') {\r\n userFactory.getToken(vm.email, vm.password, vm.rememberMe).then(success);\r\n }\r\n }\r\n\r\n function success() {\r\n logger.logSuccess('You have been logged in!', null, true);\r\n $location.url(getReturnUrl());\r\n }\r\n\r\n function failedExternal() {\r\n logger.logError('Invalid token', null, true);\r\n }\r\n }\r\n\r\n function getExternalLoginUrl(provider) {\r\n return serviceAppUrl + '/api/Account/ExternalLogin?provider=' + provider + '&clientReturnUrl=' + getReturnUrl();\r\n }\r\n\r\n function getReturnUrl() {\r\n // If login pages called after a result from server, it will have \"clientReturnUrl\" param, which will have a higher priority than locationHistory\r\n var clientReturnUrl = $location.search().clientReturnUrl;\r\n return typeof clientReturnUrl !== 'undefined' ? clientReturnUrl : locationHistory.previousItem().url();\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'RegisterController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', '$location', 'locationHistory', 'serviceAppUrl', 'logger', RegisterController]);\r\n\r\n function RegisterController(userFactory, $location, locationHistory, serviceAppUrl, logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.confirmPassword = '';\r\n vm.email = '';\r\n vm.getExternalLoginUrl = getExternalLoginUrl;\r\n vm.password = '';\r\n vm.register = register;\r\n\r\n _init();\r\n\r\n function _init() {\r\n // Generate test data if localhost\r\n if ($location.host() === 'localhost') {\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n var month = now.getMonth() + 1;\r\n var day = now.getDate();\r\n var hour = now.getHours();\r\n var minute = now.getMinutes();\r\n var second = now.getSeconds();\r\n var email = 'local_' + year + month + day + '_' + hour + minute + second + '@forcrowd.org';\r\n\r\n vm.email = email;\r\n vm.password = 'q1w2e3';\r\n vm.confirmPassword = 'q1w2e3';\r\n }\r\n }\r\n\r\n function getExternalLoginUrl(provider) {\r\n var returnUrl = locationHistory.previousItem().url();\r\n return serviceAppUrl + '/api/Account/ExternalLogin?provider=' + provider + '&clientReturnUrl=' + returnUrl;\r\n }\r\n\r\n function register() {\r\n userFactory.register(vm)\r\n .success(function () {\r\n logger.logSuccess('You have been registered!', null, true);\r\n $location.url('/_system/account/confirmEmail');\r\n })\r\n .error(function (response) {\r\n if (typeof response.error_description !== 'undefined') {\r\n logger.logError(response.error_description, null, true);\r\n }\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ResetPasswordController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', '$location', 'logger', ResetPasswordController]);\r\n\r\n function ResetPasswordController(userFactory, $location, logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.email = $location.search().email;\r\n vm.token = $location.search().token;\r\n vm.resetPassword = resetPassword;\r\n vm.resetPasswordRequest = resetPasswordRequest;\r\n vm.viewMode = typeof $location.search().email === 'undefined' || typeof $location.search().token === 'undefined' ?\r\n 'initial' :\r\n 'received'; // initial | sent | received\r\n\r\n /*** Implementations ***/\r\n\r\n function resetPassword() {\r\n // var resetPasswordBindingModel = { Token: vm.token, NewPassword: vm.newPassword, ConfirmPassword: vm.confirmPassword };\r\n var resetPasswordBindingModel = vm;\r\n userFactory.resetPassword(resetPasswordBindingModel)\r\n .success(function () {\r\n $location.url('/_system/account/login');\r\n logger.logSuccess('Your password has been reset!', null, true);\r\n });\r\n }\r\n\r\n function resetPasswordRequest() {\r\n var resetPasswordRequestBindingModel = vm;\r\n userFactory.resetPasswordRequest(resetPasswordRequestBindingModel)\r\n .success(function () {\r\n vm.viewMode = 'sent';\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ResourcePoolListController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory',\r\n 'logger',\r\n\t\t\tResourcePoolListController]);\r\n\r\n function ResourcePoolListController(resourcePoolFactory,\r\n logger) {\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.resourcePoolSet = [];\r\n\r\n _init();\r\n\r\n function _init() {\r\n resourcePoolFactory.getResourcePoolSet(false)\r\n\t\t\t .then(function (data) {\r\n\t\t\t vm.resourcePoolSet = data;\r\n\t\t\t });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ResourcePoolManageController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory',\r\n 'userFactory',\r\n '$location',\r\n '$routeParams',\r\n '$rootScope',\r\n '$uibModal',\r\n 'Enums',\r\n 'logger',\r\n ResourcePoolManageController]);\r\n\r\n function ResourcePoolManageController(resourcePoolFactory,\r\n userFactory,\r\n $location,\r\n $routeParams,\r\n $rootScope,\r\n $uibModal,\r\n Enums,\r\n logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.addElement = addElement;\r\n vm.addElementField = addElementField;\r\n vm.addElementItem = addElementItem;\r\n vm.cancelElement = cancelElement;\r\n vm.cancelElementCell = cancelElementCell;\r\n vm.cancelElementField = cancelElementField;\r\n vm.cancelElementItem = cancelElementItem;\r\n vm.cancelResourcePool = cancelResourcePool;\r\n vm.editElement = editElement;\r\n vm.editElementCell = editElementCell;\r\n vm.editElementField = editElementField;\r\n vm.editElementItem = editElementItem;\r\n vm.element = null;\r\n vm.elementMaster = null;\r\n vm.elementCell = null;\r\n vm.elementCellMaster = null;\r\n vm.elementCellSet = elementCellSet;\r\n vm.elementField = null;\r\n vm.elementFieldMaster = null;\r\n vm.elementFieldSet = elementFieldSet;\r\n vm.elementFieldDataTypeFiltered = elementFieldDataTypeFiltered;\r\n vm.elementItem = null;\r\n vm.elementItemMaster = null;\r\n vm.elementItemSet = elementItemSet;\r\n vm.entityErrors = [];\r\n vm.isElementEdit = false;\r\n vm.isElementNew = true;\r\n vm.isElementFieldEdit = false;\r\n vm.isElementFieldNew = true;\r\n vm.isElementItemEdit = false;\r\n vm.isElementItemNew = true;\r\n vm.isNew = $location.path() === '/_system/resourcePool/new';\r\n vm.isSaveEnabled = isSaveEnabled;\r\n vm.isSaving = false;\r\n vm.openCopyModal = openCopyModal;\r\n vm.openRemoveResourcePoolModal = openRemoveResourcePoolModal;\r\n vm.removeElement = removeElement;\r\n vm.removeElementField = removeElementField;\r\n vm.removeElementItem = removeElementItem;\r\n vm.removeResourcePool = removeResourcePool;\r\n vm.resourcePool = { ElementSet: [] };\r\n vm.resourcePoolId = $routeParams.resourcePoolId;\r\n vm.saveResourcePool = saveResourcePool;\r\n vm.saveElement = saveElement;\r\n vm.saveElementCell = saveElementCell;\r\n vm.saveElementField = saveElementField;\r\n vm.saveElementItem = saveElementItem;\r\n\r\n // Enums\r\n vm.ElementFieldDataType = Enums.ElementFieldDataType;\r\n vm.ElementFieldIndexCalculationType = Enums.ElementFieldIndexCalculationType;\r\n vm.ElementFieldIndexSortType = Enums.ElementFieldIndexSortType;\r\n\r\n _init();\r\n\r\n /*** Implementations ***/\r\n\r\n function _init() {\r\n\r\n if (vm.isNew) {\r\n resourcePoolFactory.createResourcePoolBasic()\r\n .then(function (resourcePool) {\r\n vm.resourcePool = resourcePool;\r\n vm.resourcePool.isEditing = true;\r\n\r\n // Title\r\n // TODO viewTitle was also set in route.js?\r\n $rootScope.viewTitle = vm.resourcePool.Name;\r\n });\r\n } else {\r\n resourcePoolFactory.getResourcePoolExpanded(vm.resourcePoolId)\r\n .then(function (resourcePool) {\r\n\r\n // Not found, navigate to 404\r\n if (resourcePool === null) {\r\n $location.url('/_system/content/404');\r\n return;\r\n }\r\n\r\n vm.resourcePool = resourcePool;\r\n vm.resourcePool.isEditing = true;\r\n\r\n // Title\r\n // TODO viewTitle was also set in route.js?\r\n $rootScope.viewTitle = vm.resourcePool.Name;\r\n });\r\n }\r\n }\r\n\r\n function addElement() {\r\n vm.element = resourcePoolFactory.createElement({\r\n ResourcePool: vm.resourcePool,\r\n Name: 'New element',\r\n IsMainElement: false\r\n });\r\n\r\n vm.isElementEdit = true;\r\n vm.isElementNew = true;\r\n }\r\n\r\n function addElementField() {\r\n\r\n var element = vm.resourcePool.ElementSet[0];\r\n\r\n // A temp fix for default value of 'SortOrder'\r\n // Later handle 'SortOrder' by UI, not by asking\r\n var sortOrder = element.ElementFieldSet.length + 1;\r\n\r\n vm.elementField = resourcePoolFactory.createElementField({\r\n Element: element,\r\n Name: 'New field',\r\n DataType: 1,\r\n SortOrder: sortOrder\r\n });\r\n\r\n vm.isElementFieldEdit = true;\r\n vm.isElementFieldNew = true;\r\n }\r\n\r\n function addElementItem() {\r\n vm.elementItem = { Element: vm.resourcePool.ElementSet[0], Name: 'New item' };\r\n vm.isElementItemEdit = true;\r\n vm.isElementItemNew = true;\r\n }\r\n\r\n function cancelElement() {\r\n\r\n // TODO Find a better way?\r\n // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15\r\n if (vm.isElementNew) {\r\n resourcePoolFactory.removeElement(vm.element);\r\n } else {\r\n vm.element.Name = vm.elementMaster.Name;\r\n }\r\n\r\n vm.isElementEdit = false;\r\n vm.element = null;\r\n vm.elementMaster = null;\r\n }\r\n\r\n function cancelElementCell() {\r\n\r\n // TODO Find a better way?\r\n // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15\r\n vm.elementCell.SelectedElementItemId = vm.elementCellMaster.SelectedElementItemId;\r\n vm.elementCell.UserElementCellSet[0].StringValue = vm.elementCellMaster.UserElementCellSet[0].StringValue;\r\n vm.elementCell.UserElementCellSet[0].BooleanValue = vm.elementCellMaster.UserElementCellSet[0].BooleanValue;\r\n vm.elementCell.UserElementCellSet[0].IntegerValue = vm.elementCellMaster.UserElementCellSet[0].IntegerValue;\r\n vm.elementCell.UserElementCellSet[0].DecimalValue = vm.elementCellMaster.UserElementCellSet[0].DecimalValue;\r\n vm.elementCell.UserElementCellSet[0].DateTimeValue = vm.elementCellMaster.UserElementCellSet[0].DateTimeValue;\r\n\r\n vm.isElementCellEdit = false;\r\n vm.elementCell = null;\r\n vm.elementCellMaster = null;\r\n }\r\n\r\n function cancelElementField() {\r\n\r\n // TODO Find a better way?\r\n // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15\r\n if (vm.isElementFieldNew) {\r\n resourcePoolFactory.removeElementField(vm.elementField);\r\n } else {\r\n vm.elementField.Name = vm.elementFieldMaster.Name;\r\n vm.elementField.DataType = vm.elementFieldMaster.DataType;\r\n vm.elementField.SelectedElementId = vm.elementFieldMaster.SelectedElementId;\r\n vm.elementField.UseFixedValue = vm.elementFieldMaster.UseFixedValue;\r\n vm.elementField.IndexEnabled = vm.elementFieldMaster.IndexEnabled;\r\n vm.elementField.IndexCalculationType = vm.elementFieldMaster.IndexCalculationType;\r\n vm.elementField.IndexSortType = vm.elementFieldMaster.IndexSortType;\r\n vm.elementField.SortOrder = vm.elementFieldMaster.SortOrder;\r\n }\r\n\r\n vm.isElementFieldEdit = false;\r\n vm.elementField = null;\r\n vm.elementFieldMaster = null;\r\n }\r\n\r\n function cancelElementItem() {\r\n\r\n // TODO Find a better way?\r\n // Can't use reject changes because in 'New CMRP' case, these are newly added entities and reject changes removes them / SH - 23 Nov. '15\r\n if (!vm.isElementItemNew) {\r\n vm.elementItem.Name = vm.elementItemMaster.Name;\r\n }\r\n\r\n vm.isElementItemEdit = false;\r\n vm.elementItem = null;\r\n vm.elementItemMaster = null;\r\n }\r\n\r\n function cancelResourcePool() {\r\n\r\n resourcePoolFactory.cancelResourcePool(vm.resourcePool);\r\n\r\n var locationPath = vm.isNew ?\r\n '/_system/resourcePool' :\r\n '/_system/resourcePool/' + vm.resourcePool.Id;\r\n\r\n $location.url(locationPath);\r\n }\r\n\r\n function editElement(element) {\r\n vm.elementMaster = angular.copy(element);\r\n vm.element = element;\r\n vm.isElementEdit = true;\r\n vm.isElementNew = false;\r\n }\r\n\r\n function editElementCell(elementCell) {\r\n vm.elementCellMaster = angular.copy(elementCell);\r\n vm.elementCell = elementCell;\r\n vm.isElementCellEdit = true;\r\n }\r\n\r\n function editElementField(elementField) {\r\n vm.elementFieldMaster = angular.copy(elementField);\r\n vm.elementField = elementField;\r\n vm.isElementFieldEdit = true;\r\n vm.isElementFieldNew = false;\r\n }\r\n\r\n function editElementItem(elementItem) {\r\n vm.elementItemMaster = angular.copy(elementItem);\r\n vm.elementItem = elementItem;\r\n vm.isElementItemEdit = true;\r\n vm.isElementItemNew = false;\r\n }\r\n\r\n function elementCellSet() {\r\n\r\n var elementItems = elementItemSet();\r\n\r\n var list = [];\r\n elementItems.forEach(function (elementItem) {\r\n elementItem.ElementCellSet.forEach(function (elementCell) {\r\n list.push(elementCell);\r\n });\r\n });\r\n return list;\r\n }\r\n\r\n function elementFieldSet() {\r\n var list = [];\r\n vm.resourcePool.ElementSet.forEach(function (element) {\r\n element.ElementFieldSet.forEach(function (elementField) {\r\n list.push(elementField);\r\n });\r\n });\r\n return list;\r\n }\r\n\r\n function elementFieldDataTypeFiltered() {\r\n\r\n var filtered = {};\r\n for (var key in vm.ElementFieldDataType) {\r\n\r\n // These types can be added only once at the moment\r\n if (key === 'DirectIncome' || key === 'Multiplier') {\r\n var exists = vm.elementField.Element.ElementFieldSet.some(fieldExists);\r\n\r\n if (!exists) {\r\n filtered[key] = vm.ElementFieldDataType[key];\r\n }\r\n } else if (key === 'Element') { // Element type can only be added if there are more than one element in the pool\r\n if (vm.elementField.Element.ResourcePool.ElementSet.length > 1) {\r\n filtered[key] = vm.ElementFieldDataType[key];\r\n }\r\n } else {\r\n filtered[key] = vm.ElementFieldDataType[key];\r\n }\r\n }\r\n\r\n function fieldExists(field) {\r\n return vm.ElementFieldDataType[key] === field.ElementFieldDataType;\r\n }\r\n\r\n return filtered;\r\n }\r\n\r\n function elementItemSet() {\r\n var list = [];\r\n vm.resourcePool.ElementSet.forEach(function (element) {\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n list.push(elementItem);\r\n });\r\n });\r\n return list;\r\n }\r\n\r\n function isSaveEnabled() {\r\n var value = !vm.isSaving &&\r\n typeof vm.resourcePoolForm !== 'undefined' &&\r\n vm.resourcePoolForm.$valid;\r\n\r\n return value;\r\n }\r\n\r\n function openCopyModal() {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: 'copyResourcePoolModal.html',\r\n controllerAs: 'vm',\r\n controller: ['resourcePoolFactory', '$uibModalInstance', CopyResourcePoolModalController]\r\n });\r\n\r\n modalInstance.result.then(function (resourcePool) {\r\n vm.resourcePool = resourcePool;\r\n });\r\n }\r\n\r\n function openRemoveResourcePoolModal() {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: 'removeResourcePoolModal.html',\r\n controller: ['$scope', '$uibModalInstance', RemoveResourcePoolModalController]\r\n });\r\n\r\n modalInstance.result.then(function () {\r\n removeResourcePool();\r\n });\r\n }\r\n\r\n function removeElement(element) {\r\n resourcePoolFactory.removeElement(element);\r\n }\r\n\r\n function removeElementField(elementField) {\r\n resourcePoolFactory.removeElementField(elementField);\r\n }\r\n\r\n function removeElementItem(elementItem) {\r\n resourcePoolFactory.removeElementItem(elementItem);\r\n }\r\n\r\n function removeResourcePool() {\r\n vm.isSaving = true;\r\n\r\n resourcePoolFactory.removeResourcePool(vm.resourcePool);\r\n\r\n userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n if (currentUser.isAuthenticated()) {\r\n resourcePoolFactory.saveChanges()\r\n .then(function () {\r\n $location.url('/_system/resourcePool');\r\n })\r\n .finally(function () {\r\n vm.isSaving = false;\r\n });\r\n } else {\r\n $location.url('/_system/resourcePool');\r\n vm.isSaving = false;\r\n }\r\n });\r\n }\r\n\r\n function saveElement() {\r\n vm.isElementEdit = false;\r\n vm.element = null;\r\n vm.elementMaster = null;\r\n }\r\n\r\n function saveElementCell() {\r\n vm.isElementCellEdit = false;\r\n vm.elementCell = null;\r\n vm.elementCellMaster = null;\r\n }\r\n\r\n function saveElementField() {\r\n\r\n // Fixes\r\n // a. UseFixedValue must be null for String & Element types\r\n if (vm.elementField.DataType === vm.ElementFieldDataType.String ||\r\n vm.elementField.DataType === vm.ElementFieldDataType.Element) {\r\n vm.elementField.UseFixedValue = null;\r\n }\r\n\r\n // b. UseFixedValue must be 'false' for Multiplier type\r\n if (vm.elementField.DataType === vm.ElementFieldDataType.Multiplier) {\r\n vm.elementField.UseFixedValue = false;\r\n }\r\n\r\n // c. DirectIncome cannot be Use Fixed Value false at the moment\r\n if (vm.elementField.DataType === vm.ElementFieldDataType.DirectIncome) {\r\n vm.elementField.UseFixedValue = true;\r\n }\r\n\r\n vm.isElementFieldEdit = false;\r\n vm.elementField = null;\r\n vm.elementFieldMaster = null;\r\n }\r\n\r\n function saveElementItem() {\r\n\r\n if (vm.isElementItemNew) {\r\n vm.elementItem = resourcePoolFactory.createElementItem(vm.elementItem);\r\n }\r\n\r\n vm.isElementItemEdit = false;\r\n vm.elementItem = null;\r\n vm.elementItemMaster = null;\r\n }\r\n\r\n function saveResourcePool() {\r\n\r\n vm.isSaving = true;\r\n\r\n // TODO Try to move this to a better place?\r\n vm.resourcePool.updateCache();\r\n\r\n userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n\r\n /* Update isEditing state */\r\n // Resource pool\r\n vm.resourcePool.isEditing = false;\r\n\r\n // User resource pools\r\n vm.resourcePool.UserResourcePoolSet.forEach(function (userResourcePool) {\r\n userResourcePool.isEditing = false;\r\n });\r\n\r\n // Elements\r\n vm.resourcePool.ElementSet.forEach(function (element) {\r\n element.isEditing = false;\r\n\r\n // Fields\r\n element.ElementFieldSet.forEach(function (elementField) {\r\n elementField.isEditing = false;\r\n\r\n // User element fields\r\n elementField.UserElementFieldSet.forEach(function (userElementField) {\r\n userElementField.isEditing = false;\r\n });\r\n });\r\n\r\n // Items\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n elementItem.isEditing = false;\r\n\r\n // Cells\r\n elementItem.ElementCellSet.forEach(function (elementCell) {\r\n elementCell.isEditing = false;\r\n\r\n // User cells\r\n elementCell.UserElementCellSet.forEach(function (userElementCell) {\r\n userElementCell.isEditing = false;\r\n });\r\n });\r\n });\r\n });\r\n /* Update isEditing state end */\r\n\r\n if (currentUser.isAuthenticated()) {\r\n resourcePoolFactory.saveChanges()\r\n .then(function () {\r\n $location.url('/_system/resourcePool/' + vm.resourcePool.Id);\r\n })\r\n .finally(function () {\r\n vm.isSaving = false;\r\n });\r\n } else {\r\n resourcePoolFactory.acceptChanges(vm.resourcePool);\r\n vm.isSaving = false;\r\n $location.url('/_system/resourcePool/' + vm.resourcePool.Id);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function RemoveResourcePoolModalController($scope, $uibModalInstance) {\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n $scope.remove = function () {\r\n $uibModalInstance.close();\r\n };\r\n }\r\n\r\n function CopyResourcePoolModalController(resourcePoolFactory, $uibModalInstance) {\r\n\r\n var vm = this;\r\n vm.close = close;\r\n vm.copy = copy;\r\n vm.resourcePoolSet = [];\r\n\r\n _init();\r\n\r\n function _init() {\r\n resourcePoolFactory.getResourcePoolSet(false)\r\n .then(function (data) {\r\n vm.resourcePoolSet = data;\r\n });\r\n }\r\n\r\n function close() {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n function copy(resourcePool) {\r\n $uibModalInstance.close(resourcePool);\r\n }\r\n }\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ResourcePoolViewController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory',\r\n '$location',\r\n '$routeParams',\r\n '$rootScope',\r\n 'logger',\r\n ResourcePoolViewController]);\r\n\r\n function ResourcePoolViewController(resourcePoolFactory, $location, $routeParams, $rootScope, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.editorConfig = getEditorConfig();\r\n\r\n init();\r\n\r\n function init() {\r\n\r\n // Title\r\n if (!vm.editorConfig.isNew) {\r\n resourcePoolFactory.getResourcePool(vm.editorConfig.resourcePoolId)\r\n .then(function (resourcePool) {\r\n\r\n // Not found, navigate to 404\r\n if (resourcePool === null) {\r\n $location.url('/_system/content/404');\r\n return;\r\n }\r\n\r\n // TODO viewTitle was also set in route.js?\r\n $rootScope.viewTitle = resourcePool.name();\r\n });\r\n }\r\n }\r\n\r\n function getEditorConfig() {\r\n\r\n var action = $location.path().substring($location.path().lastIndexOf('/') + 1);\r\n var isNew = action === 'new';\r\n var isEdit = action === 'edit';\r\n var resourcePoolId = $routeParams.resourcePoolId;\r\n\r\n var config = {\r\n isNew: isNew,\r\n isEdit: isEdit,\r\n resourcePoolId: isNew ? null : resourcePoolId\r\n };\r\n\r\n return config;\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'AllInOneController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory', '$scope', 'logger', AllInOneController]);\r\n\r\n function AllInOneController(resourcePoolFactory, $scope, logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.allInOneConfig = { resourcePoolId: 7 };\r\n\r\n // Event listeners\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueIncreased', processNewInteraction);\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueDecreased', processNewInteraction);\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueReset', processNewInteraction);\r\n\r\n _init();\r\n\r\n function _init() {\r\n processExistingInteraction();\r\n }\r\n\r\n // Processes whether the current user had already interacted with this example\r\n function processExistingInteraction() {\r\n // Priority & Knowledge Index examples copy their ratings to this one\r\n // However if the user starts directly playing ..\r\n resourcePoolFactory.getResourcePoolExpanded(vm.allInOneConfig.resourcePoolId)\r\n .then(function (resourcePool) {\r\n // Elements\r\n for (var elementIndex = 0; elementIndex < resourcePool.ElementSet.length; elementIndex++) {\r\n var element = resourcePool.ElementSet[elementIndex];\r\n // Element fields\r\n for (var elementFieldIndex = 0; elementFieldIndex < element.ElementFieldSet.length; elementFieldIndex++) {\r\n var elementField = element.ElementFieldSet[elementFieldIndex];\r\n // Element cells\r\n for (var elementCellIndex = 0; elementCellIndex < elementField.ElementCellSet.length; elementCellIndex++) {\r\n var elementCell = elementField.ElementCellSet[elementCellIndex];\r\n\r\n if (elementCell.currentUserCell()) {\r\n resourcePool.userInteracted = true;\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Processes whether the user is currently interacting with this example\r\n function processNewInteraction(event, cell) {\r\n if (cell.ElementField.Element.ResourcePoolId === vm.allInOneConfig.resourcePoolId) {\r\n cell.ElementField.Element.ResourcePool.userInteracted = true;\r\n return;\r\n }\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'BasicsController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory', 'userFactory', 'dataContext', '$scope', 'logger', BasicsController]);\r\n\r\n function BasicsController(resourcePoolFactory, userFactory, dataContext, $scope, logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.existingModelConfig = {};\r\n vm.newModelConfig = {};\r\n\r\n // Listen resource pool updated event\r\n $scope.$on('resourcePoolEditor_elementMultiplierIncreased', updateOppositeResourcePool);\r\n $scope.$on('resourcePoolEditor_elementMultiplierDecreased', updateOppositeResourcePool);\r\n $scope.$on('resourcePoolEditor_elementMultiplierReset', updateOppositeResourcePool);\r\n\r\n _init();\r\n\r\n /*** Implementations ***/\r\n\r\n function _init() {\r\n\r\n var existingModelSampleId = -102;\r\n var newModelSampleId = -103;\r\n\r\n resourcePoolFactory.getResourcePoolExpanded(existingModelSampleId)\r\n .then(function (resourcePool) {\r\n if (resourcePool === null) {\r\n getBasicsSample()\r\n .then(function (resourcePool) {\r\n resourcePool.Id = existingModelSampleId;\r\n resourcePool.Name = 'Basics - Existing Model';\r\n resourcePool.UserResourcePoolSet[0].entityAspect.setDeleted(); // Remove resource pool rate\r\n resourcePool._init(true);\r\n\r\n vm.existingModelConfig.resourcePoolId = resourcePool.Id;\r\n });\r\n } else {\r\n vm.existingModelConfig.resourcePoolId = resourcePool.Id;\r\n }\r\n });\r\n\r\n resourcePoolFactory.getResourcePoolExpanded(newModelSampleId)\r\n .then(function (resourcePool) {\r\n if (resourcePool === null) {\r\n getBasicsSample()\r\n .then(function (resourcePool) {\r\n resourcePool.Id = newModelSampleId;\r\n resourcePool.Name = 'Basics - New Model';\r\n\r\n // Employee Satisfaction field (index)\r\n var employeeSatisfactionField = resourcePoolFactory.createElementField({\r\n Element: resourcePool.mainElement(),\r\n Name: 'Employee Satisfaction',\r\n DataType: 4,\r\n UseFixedValue: false,\r\n IndexEnabled: true,\r\n IndexCalculationType: 1,\r\n IndexSortType: 1,\r\n SortOrder: 2\r\n });\r\n\r\n // A fake user & ratings\r\n // TODO Use factories instead of dataContext?\r\n var fakeUser = dataContext.createEntity('User', {});\r\n\r\n employeeSatisfactionField.ElementCellSet.forEach(function (elementCell) {\r\n var userElementCell = {\r\n User: fakeUser,\r\n ElementCell: elementCell,\r\n DecimalValue: Math.floor((Math.random() * 100) + 1)\r\n };\r\n\r\n dataContext.createEntity('UserElementCell', userElementCell);\r\n });\r\n\r\n resourcePool._init(true);\r\n\r\n vm.newModelConfig.resourcePoolId = resourcePool.Id;\r\n });\r\n } else {\r\n vm.newModelConfig.resourcePoolId = resourcePool.Id;\r\n }\r\n });\r\n }\r\n\r\n function getBasicsSample() {\r\n return resourcePoolFactory.createResourcePoolDirectIncomeAndMultiplier()\r\n .then(function (resourcePool) {\r\n resourcePool.InitialValue = 0;\r\n resourcePool.isTemp = true;\r\n\r\n var mainElement = resourcePool.mainElement();\r\n mainElement.Name = 'Organization';\r\n\r\n mainElement.ElementItemSet[0].Name = 'Alpha';\r\n mainElement.ElementItemSet[1].Name = 'Beta';\r\n resourcePoolFactory.createElementItem({\r\n Element: mainElement,\r\n Name: 'Charlie'\r\n });\r\n resourcePoolFactory.createElementItem({\r\n Element: mainElement,\r\n Name: 'Delta'\r\n });\r\n\r\n return resourcePool;\r\n });\r\n }\r\n\r\n function updateOppositeResourcePool(event, element) {\r\n\r\n var oppositeResourcePoolId = 0;\r\n\r\n if (element.ResourcePool.Id === vm.existingModelConfig.resourcePoolId) {\r\n oppositeResourcePoolId = vm.newModelConfig.resourcePoolId;\r\n } else if (element.ResourcePool.Id === vm.newModelConfig.resourcePoolId) {\r\n oppositeResourcePoolId = vm.existingModelConfig.resourcePoolId;\r\n }\r\n\r\n // Call the service to increase the multiplier\r\n if (oppositeResourcePoolId !== 0) {\r\n resourcePoolFactory.getResourcePoolExpanded(oppositeResourcePoolId)\r\n .then(function (resourcePool) {\r\n switch (event.name) {\r\n case 'resourcePoolEditor_elementMultiplierIncreased': {\r\n userFactory.updateElementMultiplier(resourcePool.mainElement(), 'increase');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementMultiplierDecreased': {\r\n userFactory.updateElementMultiplier(resourcePool.mainElement(), 'decrease');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementMultiplierReset': {\r\n userFactory.updateElementMultiplier(resourcePool.mainElement(), 'reset');\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'DefaultController';\r\n angular.module('main')\r\n .controller(controllerId, ['applicationFactory', 'userFactory', '$scope', '$location', 'disqusShortname', 'logger', DefaultController]);\r\n\r\n function DefaultController(applicationFactory, userFactory, $scope, $location, disqusShortname, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(controllerId);\r\n\r\n // Local variables\r\n var anonymousUserWarning = null;\r\n\r\n // View model\r\n var vm = this;\r\n vm.applicationInfo = null;\r\n vm.currentUser = { Email: '', isAuthenticated: function () { return false; }, hasPassword: function () { return false; } };\r\n vm.currentDate = new Date();\r\n vm.displayBankTransfer = false;\r\n vm.displayFooterIcons = false;\r\n vm.disqusConfig = {\r\n disqus_shortname: disqusShortname,\r\n disqus_identifier: '',\r\n disqus_url: ''\r\n };\r\n vm.logout = logout;\r\n vm.toggleBankTransfer = toggleBankTransfer;\r\n\r\n // Events\r\n $scope.$on('$routeChangeSuccess', routeChangeSuccess);\r\n $scope.$on('anonymousUserInteracted', anonymousUserInteracted); // Anonymous user warning\r\n $scope.$on('userFactory_currentUserChanged', currentUserChanged);\r\n\r\n _init();\r\n\r\n /*** Implementations ***/\r\n\r\n function _init() {\r\n getApplicationInfo();\r\n }\r\n\r\n function anonymousUserInteracted() {\r\n if (anonymousUserWarning === null) {\r\n var warningText = 'To prevent losing your changes, you can register for free or if you have an existing account, please login first.';\r\n var warningTitle = 'Save your changes?';\r\n var loggerOptions = { extendedTimeOut: 0, timeOut: 0 };\r\n anonymousUserWarning = logger.logWarning(warningText, null, true, warningTitle, loggerOptions);\r\n }\r\n }\r\n\r\n function currentUserChanged(event, newUser) {\r\n vm.currentUser = newUser;\r\n }\r\n\r\n function getApplicationInfo() {\r\n applicationFactory.getApplicationInfo()\r\n .then(function (applicationInfo) {\r\n vm.applicationInfo = applicationInfo;\r\n vm.applicationInfo.CurrentVersionText = vm.applicationInfo.CurrentVersion + ' - Alpha ~ Beta';\r\n });\r\n }\r\n\r\n function logout() {\r\n userFactory.logout()\r\n .then(function () {\r\n $location.url('/');\r\n });\r\n }\r\n\r\n function routeChangeSuccess(event, current, previous) {\r\n\r\n // Footer icons\r\n vm.displayFooterIcons = $location.path() === '/';\r\n\r\n // Load related disqus\r\n if (typeof current.enableDisqus !== 'undefined' && current.enableDisqus) {\r\n vm.disqusConfig.disqus_identifier = disqusShortname + $location.path().replace(/\\//g, '_');\r\n vm.disqusConfig.disqus_url = $location.absUrl().substring(0, $location.absUrl().length - $location.url().length + $location.path().length);\r\n } else {\r\n vm.disqusConfig.disqus_identifier = '';\r\n }\r\n\r\n // Remove anonymousUserWarning toastr in register & login pages, if there is\r\n if (($location.path() === '/_system/account/register' ||\r\n $location.path() === '/_system/account/login') &&\r\n anonymousUserWarning !== null) {\r\n anonymousUserWarning.remove();\r\n }\r\n }\r\n\r\n function toggleBankTransfer() {\r\n vm.displayBankTransfer = !vm.displayBankTransfer;\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'IntroductionController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', '$timeout', 'logger', IntroductionController]);\r\n\r\n function IntroductionController(resourcePoolFactory, userFactory, $scope, $timeout, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.upoConfig = {};\r\n\r\n _init();\r\n\r\n /*** Implementations ***/\r\n\r\n function _init() {\r\n\r\n var upoId = -101;\r\n\r\n resourcePoolFactory.getResourcePoolExpanded(upoId)\r\n .then(function (resourcePool) {\r\n if (resourcePool === null) {\r\n\r\n resourcePoolFactory.createResourcePoolDirectIncomeAndMultiplier()\r\n .then(function (resourcePool) {\r\n resourcePool.Id = upoId;\r\n resourcePool.Name = 'Unidentified Profiting Object (UPO)';\r\n resourcePool.InitialValue = 0;\r\n resourcePool.isTemp = true;\r\n resourcePool.displayMultiplierFunctions = false;\r\n resourcePool.UserResourcePoolSet[0].entityAspect.setDeleted(); // Remove resource pool rate\r\n\r\n var mainElement = resourcePool.mainElement();\r\n mainElement.Name = 'Organization';\r\n\r\n mainElement.ElementItemSet[0].Name = 'UPO';\r\n resourcePoolFactory.removeElementItem(mainElement.ElementItemSet[1]);\r\n\r\n resourcePool._init(true);\r\n\r\n initResourcePool(resourcePool);\r\n });\r\n } else {\r\n initResourcePool(resourcePool);\r\n }\r\n\r\n function initResourcePool(resourcePool) {\r\n vm.upoConfig.resourcePoolId = resourcePool.Id;\r\n\r\n var increaseMultiplierTimeout = $timeout(increaseMultiplier, 5000);\r\n\r\n function increaseMultiplier() {\r\n\r\n // Call the service to increase the multiplier\r\n resourcePoolFactory.getResourcePoolExpanded(vm.upoConfig.resourcePoolId)\r\n .then(function (resourcePool) {\r\n\r\n if (resourcePool === null) {\r\n return;\r\n }\r\n\r\n resourcePool.ElementSet.forEach(function (element) {\r\n userFactory.updateElementMultiplier(element, 'increase');\r\n });\r\n });\r\n\r\n // Then increase recursively\r\n increaseMultiplierTimeout = $timeout(increaseMultiplier, 2500);\r\n }\r\n\r\n // When the DOM element is removed from the page,\r\n // AngularJS will trigger the $destroy event on\r\n // the scope. This gives us a chance to cancel any\r\n // pending timer that we may have.\r\n $scope.$on(\"$destroy\", function (event) {\r\n $timeout.cancel(increaseMultiplierTimeout);\r\n });\r\n }\r\n });\r\n }\r\n\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'KnowledgeIndexController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', '$timeout', 'logger', KnowledgeIndexController]);\r\n\r\n function KnowledgeIndexController(resourcePoolFactory, userFactory, $scope, $timeout, logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.oldModelChartConfig = {\r\n title: {\r\n text: ''\r\n },\r\n options: {\r\n chart: {\r\n type: 'column',\r\n height: 358\r\n },\r\n plotOptions: {\r\n column: {\r\n allowPointSelect: true,\r\n pointWidth: 15\r\n }\r\n },\r\n xAxis: { categories: ['Knowledge'] },\r\n yAxis: {\r\n title: {\r\n text: 'Development process'\r\n },\r\n allowDecimals: false,\r\n min: 0\r\n }\r\n },\r\n size: {},\r\n series: [\r\n { name: \"My Precious Jewelry\", data: [0] },\r\n { name: 'Death Star Architecture', data: [0] },\r\n { name: \"Christina's Secret\", data: [0] },\r\n { name: 'Nuka Cola Company', data: [0] }\r\n ]\r\n };\r\n vm.newModelChartConfig = {\r\n title: {\r\n text: ''\r\n },\r\n options: {\r\n chart: {\r\n type: 'column',\r\n height: 300\r\n },\r\n plotOptions: {\r\n column: {\r\n allowPointSelect: true,\r\n pointWidth: 15\r\n }\r\n },\r\n xAxis: { categories: ['Knowledge'] },\r\n yAxis: {\r\n title: {\r\n text: 'Development process'\r\n },\r\n allowDecimals: false,\r\n min: 0\r\n }\r\n },\r\n size: {},\r\n series: [\r\n { name: 'Global Knowledge Database', data: [0] }\r\n ]\r\n };\r\n vm.knowledgeIndexConfig = { resourcePoolId: 3 };\r\n\r\n // Event listeners\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueIncreased', updateAllInOne);\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueDecreased', updateAllInOne);\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueReset', updateAllInOne);\r\n\r\n _init();\r\n\r\n function _init() {\r\n var timeout = $timeout(refreshPage, 10000);\r\n\r\n function refreshPage() {\r\n var organizationIndex = Math.floor(Math.random() * 4);\r\n vm.oldModelChartConfig.series[organizationIndex].data[0] += 1;\r\n vm.newModelChartConfig.series[0].data[0] += 1;\r\n\r\n timeout = $timeout(refreshPage, 1000);\r\n }\r\n\r\n // When the DOM element is removed from the page,\r\n // AngularJS will trigger the $destroy event on\r\n // the scope. This gives us a chance to cancel any\r\n // pending timer that we may have.\r\n $scope.$on(\"$destroy\", function (event) {\r\n $timeout.cancel(timeout);\r\n });\r\n }\r\n\r\n // Sync this example's values with 'All in One'\r\n function updateAllInOne(event, cell) {\r\n\r\n var allInOneId = 7;\r\n\r\n if (cell.ElementField.Element.ResourcePoolId !== vm.knowledgeIndexConfig.resourcePoolId) {\r\n return;\r\n }\r\n\r\n resourcePoolFactory.getResourcePoolExpanded(allInOneId)\r\n .then(function (resourcePool) {\r\n\r\n // If the current user already interacted with 'All in One', stop copying ratings\r\n if (typeof resourcePool.userInteracted !== 'undefined' && resourcePool.userInteracted) {\r\n return;\r\n }\r\n\r\n // Elements\r\n for (var elementIndex = 0; elementIndex < resourcePool.ElementSet.length; elementIndex++) {\r\n var element = resourcePool.ElementSet[elementIndex];\r\n if (element.Name === cell.ElementField.Element.Name) {\r\n // Element fields\r\n for (var elementFieldIndex = 0; elementFieldIndex < element.ElementFieldSet.length; elementFieldIndex++) {\r\n var elementField = element.ElementFieldSet[elementFieldIndex];\r\n if (elementField.Name === cell.ElementField.Name) {\r\n // Element cells\r\n for (var elementCellIndex = 0; elementCellIndex < elementField.ElementCellSet.length; elementCellIndex++) {\r\n var elementCell = elementField.ElementCellSet[elementCellIndex];\r\n if (elementCell.ElementItem.Name === cell.ElementItem.Name) {\r\n switch (event.name) {\r\n case 'resourcePoolEditor_elementCellNumericValueIncreased': {\r\n userFactory.updateElementCellNumericValue(elementCell, 'increase');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementCellNumericValueDecreased': {\r\n userFactory.updateElementCellNumericValue(elementCell, 'decrease');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementCellNumericValueReset': {\r\n userFactory.updateElementCellNumericValue(elementCell, 'reset');\r\n break;\r\n }\r\n }\r\n\r\n // Save changes\r\n resourcePoolFactory.saveChanges(1500);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'PriorityIndexController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', 'logger', PriorityIndexController]);\r\n\r\n function PriorityIndexController(resourcePoolFactory, userFactory, $scope, logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.priorityIndexConfig = { resourcePoolId: 2 };\r\n\r\n // Event listeners\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueIncreased', updateAllInOne);\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueDecreased', updateAllInOne);\r\n $scope.$on('resourcePoolEditor_elementCellNumericValueReset', updateAllInOne);\r\n\r\n // Sync this example's values with 'All in One'\r\n function updateAllInOne(event, cell) {\r\n\r\n var allInOneId = 7;\r\n\r\n if (cell.ElementField.Element.ResourcePoolId !== vm.priorityIndexConfig.resourcePoolId) {\r\n return;\r\n }\r\n\r\n resourcePoolFactory.getResourcePoolExpanded(allInOneId)\r\n .then(function (resourcePool) {\r\n\r\n // If the current user already interacted with 'All in One', stop copying ratings\r\n if (typeof resourcePool.userInteracted !== 'undefined' && resourcePool.userInteracted) {\r\n return;\r\n }\r\n\r\n // Elements\r\n for (var elementIndex = 0; elementIndex < resourcePool.ElementSet.length; elementIndex++) {\r\n var element = resourcePool.ElementSet[elementIndex];\r\n if (element.Name === cell.ElementField.Element.Name) {\r\n // Element fields\r\n for (var elementFieldIndex = 0; elementFieldIndex < element.ElementFieldSet.length; elementFieldIndex++) {\r\n var elementField = element.ElementFieldSet[elementFieldIndex];\r\n if (elementField.Name === cell.ElementField.Name) {\r\n // Element cells\r\n for (var elementCellIndex = 0; elementCellIndex < elementField.ElementCellSet.length; elementCellIndex++) {\r\n var elementCell = elementField.ElementCellSet[elementCellIndex];\r\n if (elementCell.ElementItem.Name === cell.ElementItem.Name) {\r\n switch (event.name) {\r\n case 'resourcePoolEditor_elementCellNumericValueIncreased': {\r\n userFactory.updateElementCellNumericValue(elementCell, 'increase');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementCellNumericValueDecreased': {\r\n userFactory.updateElementCellNumericValue(elementCell, 'decrease');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementCellNumericValueReset': {\r\n userFactory.updateElementCellNumericValue(elementCell, 'reset');\r\n break;\r\n }\r\n }\r\n\r\n // Save changes\r\n resourcePoolFactory.saveChanges(1500);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'TotalCostIndexController';\r\n angular.module('main')\r\n .controller(controllerId, ['resourcePoolFactory', 'userFactory', '$scope', 'logger', TotalCostIndexController]);\r\n\r\n function TotalCostIndexController(resourcePoolFactory, userFactory, $scope, logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.existingModelConfig = { resourcePoolId: 5 };\r\n vm.newModelConfig = { resourcePoolId: 6 };\r\n\r\n // Listen resource pool updated event\r\n $scope.$on('resourcePoolEditor_elementMultiplierIncreased', updateOppositeResourcePool);\r\n $scope.$on('resourcePoolEditor_elementMultiplierDecreased', updateOppositeResourcePool);\r\n $scope.$on('resourcePoolEditor_elementMultiplierReset', updateOppositeResourcePool);\r\n\r\n function updateOppositeResourcePool(event, element) {\r\n\r\n var oppositeResourcePoolId = 0;\r\n\r\n if (element.ResourcePool.Id === vm.existingModelConfig.resourcePoolId) {\r\n oppositeResourcePoolId = vm.newModelConfig.resourcePoolId;\r\n } else if (element.ResourcePool.Id === vm.newModelConfig.resourcePoolId) {\r\n oppositeResourcePoolId = vm.existingModelConfig.resourcePoolId;\r\n }\r\n\r\n // Call the service to increase the multiplier\r\n if (oppositeResourcePoolId > 0) {\r\n resourcePoolFactory.getResourcePoolExpanded(oppositeResourcePoolId)\r\n .then(function (resourcePool) {\r\n\r\n switch (event.name) {\r\n case 'resourcePoolEditor_elementMultiplierIncreased': {\r\n userFactory.updateElementMultiplier(resourcePool.mainElement(), 'increase');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementMultiplierDecreased': {\r\n userFactory.updateElementMultiplier(resourcePool.mainElement(), 'decrease');\r\n break;\r\n }\r\n case 'resourcePoolEditor_elementMultiplierReset': {\r\n userFactory.updateElementMultiplier(resourcePool.mainElement(), 'reset');\r\n break;\r\n }\r\n }\r\n\r\n resourcePoolFactory.saveChanges(1500);\r\n });\r\n }\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var directiveId = 'resourcePoolEditor';\r\n\r\n angular.module('main')\r\n .directive(directiveId, ['resourcePoolFactory',\r\n 'userFactory',\r\n 'Enums',\r\n '$location',\r\n '$rootScope',\r\n 'logger',\r\n resourcePoolEditor]);\r\n\r\n function resourcePoolEditor(resourcePoolFactory,\r\n userFactory,\r\n Enums,\r\n $location,\r\n $rootScope,\r\n logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(directiveId);\r\n\r\n function link(scope, elm, attrs) {\r\n\r\n // Local variables\r\n scope.currentUser = null;\r\n scope.displayIndexDetails = false;\r\n scope.editResourcePool = editResourcePool;\r\n scope.errorMessage = '';\r\n scope.isSaving = false;\r\n scope.resourcePool = { Name: 'Loading...' };\r\n scope.resourcePoolId = null;\r\n\r\n // Functions\r\n scope.changeSelectedElement = changeSelectedElement;\r\n scope.decreaseElementCellNumericValue = decreaseElementCellNumericValue;\r\n scope.decreaseElementMultiplier = decreaseElementMultiplier;\r\n scope.decreaseElementCellMultiplier = decreaseElementCellMultiplier;\r\n scope.decreaseIndexRating = decreaseIndexRating;\r\n scope.decreaseResourcePoolRate = decreaseResourcePoolRate;\r\n scope.increaseElementCellNumericValue = increaseElementCellNumericValue;\r\n scope.increaseElementMultiplier = increaseElementMultiplier;\r\n scope.increaseElementCellMultiplier = increaseElementCellMultiplier;\r\n scope.increaseIndexRating = increaseIndexRating;\r\n scope.increaseResourcePoolRate = increaseResourcePoolRate;\r\n scope.resetElementCellNumericValue = resetElementCellNumericValue;\r\n scope.resetElementMultiplier = resetElementMultiplier;\r\n scope.resetElementCellMultiplier = resetElementCellMultiplier;\r\n scope.resetIndexRating = resetIndexRating;\r\n scope.resetResourcePoolRate = resetResourcePoolRate;\r\n scope.toggleIndexDetails = toggleIndexDetails;\r\n\r\n // Event handlers\r\n scope.$watch('config', configChanged, true);\r\n scope.$on('saveChangesStart', saveChangesStart);\r\n scope.$on('saveChangesCompleted', saveChangesCompleted);\r\n scope.$on('userFactory_currentUserChanged', currentUserChanged);\r\n\r\n /*** Implementations ***/\r\n\r\n function changeSelectedElement(element) {\r\n scope.resourcePool.selectedElement(element);\r\n loadChartData();\r\n }\r\n\r\n function configChanged() {\r\n var resourcePoolId = typeof scope.config.resourcePoolId === 'undefined' ? null : Number(scope.config.resourcePoolId);\r\n userFactory.getCurrentUser()\r\n .then(function (currentUser) {\r\n initialize(currentUser, resourcePoolId);\r\n });\r\n }\r\n\r\n function decreaseElementCellNumericValue(cell) {\r\n userFactory.updateElementCellNumericValue(cell, 'decrease');\r\n $rootScope.$broadcast('resourcePoolEditor_elementCellNumericValueDecreased', cell);\r\n saveChanges();\r\n }\r\n\r\n function decreaseElementMultiplier(element) {\r\n userFactory.updateElementMultiplier(element, 'decrease');\r\n $rootScope.$broadcast('resourcePoolEditor_elementMultiplierDecreased', element);\r\n saveChanges();\r\n }\r\n\r\n function decreaseElementCellMultiplier(elementCell) {\r\n userFactory.updateElementCellMultiplier(elementCell, 'decrease');\r\n $rootScope.$broadcast('resourcePoolEditor_elementCellMultiplierDecreased', element);\r\n saveChanges();\r\n }\r\n\r\n function decreaseIndexRating(field) {\r\n userFactory.updateElementFieldIndexRating(field, 'decrease');\r\n saveChanges();\r\n }\r\n\r\n function decreaseResourcePoolRate() {\r\n userFactory.updateResourcePoolRate(scope.resourcePool, 'decrease');\r\n saveChanges();\r\n }\r\n\r\n function editResourcePool() {\r\n // TODO Instead of having fixed url here, broadcast an 'edit request'?\r\n $location.url('/_system/resourcePool/' + scope.resourcePoolId + '/edit');\r\n }\r\n\r\n function increaseElementCellNumericValue(cell) {\r\n $rootScope.$broadcast('resourcePoolEditor_elementCellNumericValueIncreased', cell);\r\n userFactory.updateElementCellNumericValue(cell, 'increase');\r\n saveChanges();\r\n }\r\n\r\n function increaseElementMultiplier(element) {\r\n userFactory.updateElementMultiplier(element, 'increase');\r\n $rootScope.$broadcast('resourcePoolEditor_elementMultiplierIncreased', element);\r\n saveChanges();\r\n }\r\n\r\n function increaseElementCellMultiplier(elementCell) {\r\n userFactory.updateElementCellMultiplier(elementCell, 'increase');\r\n $rootScope.$broadcast('resourcePoolEditor_elementCellMultiplierIncreased', element);\r\n saveChanges();\r\n }\r\n\r\n function increaseIndexRating(field) {\r\n userFactory.updateElementFieldIndexRating(field, 'increase');\r\n saveChanges();\r\n }\r\n\r\n function increaseResourcePoolRate() {\r\n userFactory.updateResourcePoolRate(scope.resourcePool, 'increase');\r\n saveChanges();\r\n }\r\n\r\n function initialize(user, resourcePoolId) {\r\n\r\n if (scope.currentUser !== user || scope.resourcePoolId !== resourcePoolId) {\r\n scope.currentUser = user;\r\n scope.resourcePoolId = resourcePoolId;\r\n\r\n // Clear previous error messages\r\n scope.errorMessage = '';\r\n\r\n scope.chartConfig = {\r\n credits: {\r\n enabled: false\r\n },\r\n loading: true,\r\n options: {\r\n plotOptions: {\r\n column: {\r\n allowPointSelect: true,\r\n pointWidth: 15\r\n },\r\n pie: {\r\n allowPointSelect: true,\r\n cursor: 'pointer',\r\n dataLabels: {\r\n enabled: false\r\n },\r\n showInLegend: true\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: ''\r\n },\r\n xAxis: { categories: [''] },\r\n yAxis: {\r\n allowDecimals: false,\r\n min: 0\r\n }\r\n },\r\n size: {},\r\n title: { text: '' }\r\n };\r\n\r\n // Validate\r\n if (scope.resourcePoolId === null) {\r\n scope.errorMessage = 'CMRP Id cannot be null';\r\n scope.chartConfig.loading = false;\r\n return;\r\n }\r\n\r\n // Get resource pool\r\n resourcePoolFactory.getResourcePoolExpanded(scope.resourcePoolId)\r\n .then(function (resourcePool) {\r\n\r\n if (resourcePool === null) {\r\n scope.errorMessage = 'Invalid CMRP Id';\r\n return;\r\n }\r\n\r\n // It returns an array, set the first item in the list\r\n scope.resourcePool = resourcePool;\r\n\r\n if (scope.resourcePool.selectedElement() !== null) {\r\n loadChartData();\r\n }\r\n })\r\n .catch(function () {\r\n // TODO scope.errorMessage ?\r\n })\r\n .finally(function () {\r\n scope.chartConfig.loading = false;\r\n });\r\n }\r\n }\r\n\r\n function loadChartData() {\r\n\r\n // Current element\r\n var element = scope.resourcePool.selectedElement();\r\n var chartData = null;\r\n\r\n if (element === null) {\r\n return;\r\n }\r\n\r\n // Item length check\r\n if (element.ElementItemSet.length > 20) {\r\n return;\r\n }\r\n\r\n scope.chartConfig.title = { text: element.Name };\r\n scope.chartConfig.series = [];\r\n\r\n if (scope.displayIndexDetails) {\r\n\r\n // Pie type\r\n scope.chartConfig.title = { text: 'Indexes' };\r\n scope.chartConfig.options.chart = { type: 'pie' };\r\n scope.chartConfig.options.yAxis.title = { text: '' };\r\n\r\n chartData = [];\r\n element.elementFieldIndexSet().forEach(function (elementFieldIndex) {\r\n var chartItem = new ElementFieldIndexChartItem(elementFieldIndex);\r\n chartData.push(chartItem);\r\n });\r\n scope.chartConfig.series = [{ data: chartData }];\r\n\r\n } else {\r\n\r\n scope.chartConfig.title = { text: element.Name };\r\n\r\n // TODO Check this rule?\r\n if (element === element.ResourcePool.mainElement() && (element.totalIncome() > 0 || element.directIncomeField() !== null)) {\r\n\r\n // Column type\r\n scope.chartConfig.options.chart = { type: 'column' };\r\n scope.chartConfig.options.yAxis.title = { text: 'Total Income' };\r\n\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n var chartItem = new ColumnChartItem(elementItem);\r\n scope.chartConfig.series.push(chartItem);\r\n });\r\n } else {\r\n\r\n // Pie type\r\n scope.chartConfig.options.chart = { type: 'pie' };\r\n scope.chartConfig.options.yAxis.title = { text: '' };\r\n\r\n chartData = [];\r\n element.ElementItemSet.forEach(function (elementItem) {\r\n elementItem.ElementCellSet.forEach(function (elementCell) {\r\n if (elementCell.ElementField.IndexEnabled) {\r\n var chartItem = new PieChartItem(elementCell);\r\n chartData.push(chartItem);\r\n }\r\n });\r\n });\r\n scope.chartConfig.series = [{ data: chartData }];\r\n }\r\n }\r\n }\r\n\r\n function resetElementCellNumericValue(cell) {\r\n userFactory.updateElementCellNumericValue(cell, 'reset');\r\n $rootScope.$broadcast('resourcePoolEditor_elementCellNumericValueReset', element);\r\n saveChanges();\r\n }\r\n\r\n function resetElementMultiplier(element) {\r\n userFactory.updateElementMultiplier(element, 'reset');\r\n $rootScope.$broadcast('resourcePoolEditor_elementMultiplierReset', element);\r\n saveChanges();\r\n }\r\n\r\n function resetElementCellMultiplier(elementCell) {\r\n userFactory.updateElementCellMultiplier(elementCell, 'reset');\r\n $rootScope.$broadcast('resourcePoolEditor_elementCellMultiplierReset', element);\r\n saveChanges();\r\n }\r\n\r\n function resetIndexRating(field) {\r\n userFactory.updateElementFieldIndexRating(field, 'reset');\r\n saveChanges();\r\n }\r\n\r\n function resetResourcePoolRate() {\r\n userFactory.updateResourcePoolRate(scope.resourcePool, 'reset');\r\n saveChanges();\r\n }\r\n\r\n function saveChanges() {\r\n resourcePoolFactory.saveChanges(1500)\r\n .catch(function (error) {\r\n // Conflict (Concurrency exception)\r\n if (typeof error.status !== 'undefined' && error.status === '409') {\r\n // TODO Try to recover!\r\n } else if (typeof error.entityErrors !== 'undefined') {\r\n // config.entityErrors = error.entityErrors;\r\n }\r\n });\r\n }\r\n\r\n function saveChangesStart() {\r\n scope.isSaving = true;\r\n }\r\n\r\n function saveChangesCompleted() {\r\n scope.isSaving = false;\r\n }\r\n\r\n // Index Details\r\n function toggleIndexDetails() {\r\n scope.displayIndexDetails = !scope.displayIndexDetails;\r\n loadChartData();\r\n }\r\n\r\n function currentUserChanged(event, newUser) {\r\n initialize(newUser, scope.resourcePoolId);\r\n }\r\n\r\n /* Chart objects */\r\n\r\n // TODO Store these in a better place?\r\n // TODO Also test these better, by comparing it with resourcePool.selectedElement() property!\r\n function ColumnChartItem(elementItem) {\r\n var self = this;\r\n\r\n Object.defineProperty(self, \"name\", {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n return elementItem.Name;\r\n }\r\n });\r\n\r\n Object.defineProperty(self, \"data\", {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n return [elementItem.totalIncome()];\r\n }\r\n });\r\n }\r\n\r\n function ElementFieldIndexChartItem(elementFieldIndex) {\r\n var self = this;\r\n\r\n Object.defineProperty(self, \"name\", {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () { return elementFieldIndex.Name; }\r\n });\r\n\r\n Object.defineProperty(self, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n var indexRating = elementFieldIndex.indexRating();\r\n // TODO Make rounding better, instead of toFixed + number\r\n return Number(indexRating.toFixed(2));\r\n }\r\n });\r\n }\r\n\r\n function PieChartItem(elementCell) {\r\n var self = this;\r\n\r\n Object.defineProperty(self, \"name\", {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n return elementCell.ElementItem.Name;\r\n }\r\n });\r\n\r\n Object.defineProperty(self, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n get: function () {\r\n var numericValue = elementCell.numericValue();\r\n // TODO Make rounding better, instead of toFixed + number\r\n return Number(numericValue.toFixed(2));\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n restrict: 'E',\r\n templateUrl: '/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.49.0',\r\n scope: {\r\n config: '='\r\n },\r\n link: link\r\n };\r\n }\r\n})();\r\n","//------------------------------------------------------------------------------\r\n// \r\n// This code was generated from a template.\r\n//\r\n// Manual changes to this file may cause unexpected behavior in your application.\r\n// Manual changes to this file will be overwritten if the code is regenerated.\r\n// \r\n//------------------------------------------------------------------------------\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'resourcePoolFactory';\r\n angular.module('main')\r\n .factory(factoryId, ['dataContext', '$rootScope', 'logger', resourcePoolFactory]);\r\n\r\n function resourcePoolFactory(dataContext, $rootScope, logger) {\r\n\r\n // Logger\r\n logger = logger.forSource(factoryId);\r\n\r\n // To determine whether the data will be fetched from server or local\r\n var minimumDate = new Date(0);\r\n var fetchedOn = minimumDate;\r\n\r\n // Factory methods (alphabetically)\r\n var factory = {\r\n createResourcePool: createResourcePool,\r\n deleteResourcePool: deleteResourcePool,\r\n getChanges: getChanges,\r\n getChangesCount: getChangesCount,\r\n getResourcePoolSet: getResourcePoolSet,\r\n getResourcePool: getResourcePool,\r\n hasChanges: hasChanges,\r\n rejectChanges: rejectChanges,\r\n saveChanges: saveChanges,\r\n saveChangesAlt: saveChangesAlt\r\n };\r\n\r\n // User logged out\r\n $rootScope.$on('userFactory_currentUserChanged', function () {\r\n fetchedOn = minimumDate;\r\n });\r\n\r\n return factory;\r\n\r\n /*** Implementations ***/\r\n\r\n function createResourcePool(resourcePool) {\r\n return dataContext.createEntity('ResourcePool', resourcePool);\r\n }\r\n\r\n function deleteResourcePool(resourcePool) {\r\n resourcePool.entityAspect.setDeleted();\r\n }\r\n\r\n function getChanges() {\r\n return dataContext.getChanges();\r\n }\r\n\r\n function getChangesCount() {\r\n return dataContext.getChangesCount();\r\n }\r\n\r\n function getResourcePoolSet(forceRefresh) {\r\n var count;\r\n if (forceRefresh) {\r\n if (dataContext.hasChanges()) {\r\n count = dataContext.getChangesCount();\r\n dataContext.rejectChanges(); // undo all unsaved changes!\r\n logger.logWarning('Discarded ' + count + ' pending change(s)', null);\r\n }\r\n }\r\n\r\n var query = breeze.EntityQuery\r\n\t\t\t\t.from('ResourcePool')\r\n\t\t\t\t.expand(['User'])\r\n ;\r\n\r\n // Fetch the data from server, in case if it's not fetched earlier or forced\r\n var fetchFromServer = fetchedOn === minimumDate || forceRefresh;\r\n\r\n // Prepare the query\r\n if (fetchFromServer) { // From remote\r\n query = query.using(breeze.FetchStrategy.FromServer);\r\n fetchedOn = new Date();\r\n }\r\n else { // From local\r\n query = query.using(breeze.FetchStrategy.FromLocalCache);\r\n }\r\n\r\n return dataContext.executeQuery(query)\r\n .then(success).catch(failed);\r\n\r\n function success(response) {\r\n count = response.results.length;\r\n //logger.logSuccess('Got ' + count + ' resourcePool(s)', response);\r\n\r\n // Filter out 'temp' resource pools\r\n var data = [];\r\n response.results.forEach(function (item) {\r\n if (!item.isTemp) {\r\n data.push(item);\r\n }\r\n });\r\n\r\n return data;\r\n }\r\n\r\n function failed(error) {\r\n var message = error.message || 'ResourcePool query failed';\r\n logger.logError(message, error, true);\r\n }\r\n }\r\n\r\n function getResourcePool(resourcePoolId, forceRefresh) {\r\n return dataContext.fetchEntityByKey('ResourcePool', resourcePoolId, !forceRefresh)\r\n .then(success).catch(failed);\r\n\r\n function success(result) {\r\n return result.entity;\r\n }\r\n\r\n function failed(error) {\r\n var message = error.message || 'getResourcePool query failed';\r\n logger.logError(message, error, true);\r\n }\r\n }\r\n\r\n function hasChanges() {\r\n return dataContext.hasChanges();\r\n }\r\n\r\n function rejectChanges() {\r\n dataContext.rejectChanges();\r\n }\r\n\r\n function saveChanges(delay) {\r\n return dataContext.saveChanges(delay);\r\n }\r\n\r\n function saveChangesAlt(resourcePool, delay) {\r\n return dataContext.saveChangesAlt(resourcePool.getEntities(), delay);\r\n }\r\n }\r\n})();\r\n","//------------------------------------------------------------------------------\r\n// \r\n// This code was generated from a template.\r\n//\r\n// Manual changes to this file may cause unexpected behavior in your application.\r\n// Manual changes to this file will be overwritten if the code is regenerated.\r\n// \r\n//------------------------------------------------------------------------------\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n var factoryId = 'userFactory';\r\n angular.module('main')\r\n .factory(factoryId, ['dataContext', '$rootScope', 'logger', userFactory]);\r\n\r\n function userFactory(dataContext, $rootScope, logger) {\r\n \r\n\t\t// Logger\r\n\t\tlogger = logger.forSource(factoryId);\r\n\r\n // To determine whether the data will be fetched from server or local\r\n var minimumDate = new Date(0);\r\n var fetchedOn = minimumDate;\r\n\r\n // Factory methods (alphabetically)\r\n var factory = {\r\n createUser: createUser,\r\n deleteUser: deleteUser,\r\n getChanges: getChanges,\r\n getChangesCount: getChangesCount,\r\n getUserSet: getUserSet,\r\n getUser: getUser,\r\n hasChanges: hasChanges,\r\n rejectChanges: rejectChanges,\r\n saveChanges: saveChanges,\r\n saveChangesAlt: saveChangesAlt\r\n };\r\n\r\n // User logged out\r\n $rootScope.$on('userFactory_currentUserChanged', function () {\r\n fetchedOn = minimumDate;\r\n });\r\n\r\n return factory;\r\n\r\n /*** Implementations ***/\r\n\r\n function createUser(user) {\r\n return dataContext.createEntity('Users', user);\r\n }\r\n\r\n function deleteUser(user) {\r\n user.entityAspect.setDeleted();\r\n }\r\n\r\n function getChanges() {\r\n return dataContext.getChanges();\r\n }\r\n\r\n function getChangesCount() {\r\n return dataContext.getChangesCount();\r\n }\r\n\r\n function getUserSet(forceRefresh) {\r\n var count;\r\n if (forceRefresh) {\r\n if (dataContext.hasChanges()) {\r\n count = dataContext.getChangesCount();\r\n dataContext.rejectChanges(); // undo all unsaved changes!\r\n logger.logWarning('Discarded ' + count + ' pending change(s)', null);\r\n }\r\n }\r\n\r\n var query = breeze.EntityQuery\r\n\t\t\t\t.from('Users')\r\n ;\r\n\r\n // Fetch the data from server, in case if it's not fetched earlier or forced\r\n var fetchFromServer = fetchedOn === minimumDate || forceRefresh;\r\n\r\n // Prepare the query\r\n if (fetchFromServer) { // From remote\r\n query = query.using(breeze.FetchStrategy.FromServer);\r\n fetchedOn = new Date();\r\n }\r\n else { // From local\r\n query = query.using(breeze.FetchStrategy.FromLocalCache);\r\n }\r\n\r\n return dataContext.executeQuery(query)\r\n .then(success).catch(failed);\r\n\r\n function success(response) {\r\n count = response.results.length;\r\n //logger.logSuccess('Got ' + count + ' user(s)', response);\r\n return response.results;\r\n }\r\n\r\n function failed(error) {\r\n var message = error.message || 'User query failed';\r\n logger.logError(message, error, true);\r\n }\r\n }\r\n\r\n function getUser(userId, forceRefresh) {\r\n return dataContext.fetchEntityByKey('User', userId, !forceRefresh)\r\n .then(success).catch(failed);\r\n\r\n function success(result) {\r\n return result.entity;\r\n }\r\n\r\n function failed(error) {\r\n var message = error.message || 'getUser query failed';\r\n logger.logError(message, error, true);\r\n }\r\n }\r\n\r\n function hasChanges() {\r\n return dataContext.hasChanges();\r\n }\r\n\r\n function rejectChanges() {\r\n dataContext.rejectChanges();\r\n }\r\n\r\n function saveChanges(delay) {\r\n return dataContext.saveChanges(delay);\r\n }\r\n\r\n function saveChangesAlt(user, delay) {\r\n\r\n var entities = [user];\r\n\r\n // TODO This approach is not good, controller should directly pass 'entities', otherwise factory cannot know whether it should only pass 'parent entity' or with its 'children'?'\r\n // Compare this with resourcePoolFactory saveChanges, use same approach\r\n // coni2k - 15 Feb. '16\r\n\r\n return dataContext.saveChangesAlt(entities, delay);\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'FairShareIndexSampleController';\r\n angular.module('main')\r\n .controller(controllerId, ['userFactory', 'logger', FairShareIndexSampleController]);\r\n\r\n function FairShareIndexSampleController(userFactory, logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'ResourcePoolRateSampleController';\r\n angular.module('main')\r\n .controller(controllerId, ['logger', ResourcePoolRateSampleController]);\r\n\r\n function ResourcePoolRateSampleController(logger) {\r\n\r\n logger = logger.forSource(controllerId);\r\n\r\n var vm = this;\r\n vm.resourcePoolRate_SampleResourcePoolId = 12;\r\n }\r\n})();\r\n"],"sourceRoot":"/_system/js/app"} \ No newline at end of file diff --git a/ngClient/js/app/config/authorization.js b/ngClient/_system/js/app/config/authorization.js similarity index 100% rename from ngClient/js/app/config/authorization.js rename to ngClient/_system/js/app/config/authorization.js diff --git a/ngClient/js/app/config/breeze.js b/ngClient/_system/js/app/config/breeze.js similarity index 100% rename from ngClient/js/app/config/breeze.js rename to ngClient/_system/js/app/config/breeze.js diff --git a/ngClient/js/app/config/exceptionHandlerExtension.js b/ngClient/_system/js/app/config/exceptionHandlerExtension.js similarity index 100% rename from ngClient/js/app/config/exceptionHandlerExtension.js rename to ngClient/_system/js/app/config/exceptionHandlerExtension.js diff --git a/ngClient/js/app/config/googleAnalytics.js b/ngClient/_system/js/app/config/googleAnalytics.js similarity index 100% rename from ngClient/js/app/config/googleAnalytics.js rename to ngClient/_system/js/app/config/googleAnalytics.js diff --git a/ngClient/js/app/config/route.js b/ngClient/_system/js/app/config/route.js similarity index 52% rename from ngClient/js/app/config/route.js rename to ngClient/_system/js/app/config/route.js index 05e4572b6..dc49ba067 100644 --- a/ngClient/js/app/config/route.js +++ b/ngClient/_system/js/app/config/route.js @@ -16,28 +16,27 @@ .when('/', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) .when('/default.aspx', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) // Different than normal content, enableDisqus: false - .when('/content/404/', { title: function () { return '404'; }, templateUrl: '/views/content/404.html?v=0.46.0', enableDisqus: false, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/content/:key/', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/content/404/', { title: function () { return '404'; }, templateUrl: '/_system/views/content/404.html?v=0.49.0', enableDisqus: false, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/content/:key/', { title: getContentRouteTitle, templateUrl: getContentTemplateUrl, enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) /* CMRP List + View + Edit pages */ - .when('/resourcePool', { title: function () { return 'CMRP List'; }, templateUrl: '/views/resourcePool/resourcePoolList.html?v=0.47.0', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/resourcePool/new', { title: function () { return 'New CMRP'; }, templateUrl: '/views/resourcePool/resourcePoolManage.html?v=0.43.2', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/resourcePool/:resourcePoolId/edit', { title: function () { return 'Edit CMRP'; }, templateUrl: '/views/resourcePool/resourcePoolManage.html?v=0.43.2', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/resourcePool/:resourcePoolId', { title: function () { return 'View CMRP'; }, templateUrl: '/views/resourcePool/resourcePoolView.html?v=0.43.2', enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/resourcePool', { title: function () { return 'CMRP List'; }, templateUrl: '/_system/views/resourcePool/resourcePoolList.html?v=0.49.1', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/resourcePool/new', { title: function () { return 'New CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/resourcePool/:resourcePoolId/edit', { title: function () { return 'Edit CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolManage.html?v=0.49.0', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/resourcePool/:resourcePoolId', { title: function () { return 'View CMRP'; }, templateUrl: '/_system/views/resourcePool/resourcePoolView.html?v=0.49.0', enableDisqus: true, resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) /* Account */ - .when('/account/accountEdit', { title: function () { return 'Account Edit'; }, templateUrl: '/views/account/accountEdit.html?v=0.43.2', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/accountEdit', { title: function () { return 'Account Edit'; }, templateUrl: '/views/account/accountEdit.html?v=0.43.2', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/addPassword', { title: function () { return 'Add Password'; }, templateUrl: '/views/account/addPassword.html?v=0.43.2', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/changeEmail', { title: function () { return 'Change Email'; }, templateUrl: '/views/account/changeEmail.html?v=0.43.2', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/changePassword', { title: function () { return 'Change Password'; }, templateUrl: '/views/account/changePassword.html?v=0.43.2', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/confirmEmail', { title: function () { return 'Confirm Email'; }, templateUrl: '/views/account/confirmEmail.html?v=0.44', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/resetPassword', { title: function () { return 'Reset Password'; }, templateUrl: '/views/account/resetPassword.html?v=0.48.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/login', { title: function () { return 'Login'; }, templateUrl: '/views/account/login.html?v=0.44', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) - .when('/account/register', { title: function () { return 'Register'; }, templateUrl: '/views/account/register.html?v=0.45', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/accountEdit', { title: function () { return 'Account Edit'; }, templateUrl: '/_system/views/account/accountEdit.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/addPassword', { title: function () { return 'Add Password'; }, templateUrl: '/_system/views/account/addPassword.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/changeEmail', { title: function () { return 'Change Email'; }, templateUrl: '/_system/views/account/changeEmail.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/changePassword', { title: function () { return 'Change Password'; }, templateUrl: '/_system/views/account/changePassword.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/confirmEmail', { title: function () { return 'Confirm Email'; }, templateUrl: '/_system/views/account/confirmEmail.html?v=0.49.0', accessType: 'authenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/login', { title: function () { return 'Login'; }, templateUrl: '/_system/views/account/login.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/register', { title: function () { return 'Register'; }, templateUrl: '/_system/views/account/register.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) + .when('/_system/account/resetPassword', { title: function () { return 'Reset Password'; }, templateUrl: '/_system/views/account/resetPassword.html?v=0.49.0', accessType: 'unauthenticatedRequired', resolve: { validateAccess: ['userFactory', '$route', '$q', 'locationHistory', '$location', 'logger', validateAccess] } }) /* Otherwise */ - .otherwise({ redirectTo: '/content/404' }); // TODO Is it possible to return Response.StatusCode = 404; ? + .otherwise({ redirectTo: '/_system/content/404' }); // TODO Is it possible to return Response.StatusCode = 404; ? // Html5Mode is on, if supported (# will not be used) if (window.history && window.history.pushState) { @@ -70,7 +69,7 @@ params.key : 'home'; // Default view - return '/views/content/' + key + '.html?v=0.47.1'; + return '/_system/views/content/' + key + '.html?v=0.49.0'; } function validateAccess(userFactory, $route, $q, locationHistory, $location, logger) { @@ -116,7 +115,7 @@ if (eventObj.accessType === 'unauthenticatedRequired') { $location.url(locationHistory.previousItem('unauthenticatedRequired').url()); } else if (eventObj.accessType === 'authenticatedRequired') { - $location.url('/account/login?error=To be able to continue, please login first'); + $location.url('/_system/account/login?error=To be able to continue, please login first'); } } diff --git a/ngClient/js/app/controllers/account/accountEditController.js b/ngClient/_system/js/app/controllers/account/AccountEditController.js similarity index 100% rename from ngClient/js/app/controllers/account/accountEditController.js rename to ngClient/_system/js/app/controllers/account/AccountEditController.js diff --git a/ngClient/js/app/controllers/account/addPasswordController.js b/ngClient/_system/js/app/controllers/account/AddPasswordController.js similarity index 100% rename from ngClient/js/app/controllers/account/addPasswordController.js rename to ngClient/_system/js/app/controllers/account/AddPasswordController.js diff --git a/ngClient/js/app/controllers/account/changeEmailController.js b/ngClient/_system/js/app/controllers/account/ChangeEmailController.js similarity index 95% rename from ngClient/js/app/controllers/account/changeEmailController.js rename to ngClient/_system/js/app/controllers/account/ChangeEmailController.js index d5629146f..717e224ab 100644 --- a/ngClient/js/app/controllers/account/changeEmailController.js +++ b/ngClient/_system/js/app/controllers/account/ChangeEmailController.js @@ -37,7 +37,7 @@ userFactory.changeEmail(vm) .success(function () { - $location.url('/account/confirmEmail'); + $location.url('/_system/account/confirmEmail'); }) .finally(function () { vm.isChangeEmailDisabled = false; diff --git a/ngClient/js/app/controllers/account/changePasswordController.js b/ngClient/_system/js/app/controllers/account/ChangePasswordController.js similarity index 100% rename from ngClient/js/app/controllers/account/changePasswordController.js rename to ngClient/_system/js/app/controllers/account/ChangePasswordController.js diff --git a/ngClient/js/app/controllers/account/confirmEmailController.js b/ngClient/_system/js/app/controllers/account/ConfirmEmailController.js similarity index 100% rename from ngClient/js/app/controllers/account/confirmEmailController.js rename to ngClient/_system/js/app/controllers/account/ConfirmEmailController.js diff --git a/ngClient/js/app/controllers/account/loginController.js b/ngClient/_system/js/app/controllers/account/LoginController.js similarity index 100% rename from ngClient/js/app/controllers/account/loginController.js rename to ngClient/_system/js/app/controllers/account/LoginController.js diff --git a/ngClient/js/app/controllers/account/registerController.js b/ngClient/_system/js/app/controllers/account/RegisterController.js similarity index 96% rename from ngClient/js/app/controllers/account/registerController.js rename to ngClient/_system/js/app/controllers/account/RegisterController.js index 44350f2af..bbf20b681 100644 --- a/ngClient/js/app/controllers/account/registerController.js +++ b/ngClient/_system/js/app/controllers/account/RegisterController.js @@ -45,7 +45,7 @@ userFactory.register(vm) .success(function () { logger.logSuccess('You have been registered!', null, true); - $location.url('/account/confirmEmail'); + $location.url('/_system/account/confirmEmail'); }) .error(function (response) { if (typeof response.error_description !== 'undefined') { diff --git a/ngClient/js/app/controllers/account/ResetPasswordController.js b/ngClient/_system/js/app/controllers/account/ResetPasswordController.js similarity index 96% rename from ngClient/js/app/controllers/account/ResetPasswordController.js rename to ngClient/_system/js/app/controllers/account/ResetPasswordController.js index 1be02cb2d..9ad984318 100644 --- a/ngClient/js/app/controllers/account/ResetPasswordController.js +++ b/ngClient/_system/js/app/controllers/account/ResetPasswordController.js @@ -24,7 +24,7 @@ var resetPasswordBindingModel = vm; userFactory.resetPassword(resetPasswordBindingModel) .success(function () { - $location.url('/account/login'); + $location.url('/_system/account/login'); logger.logSuccess('Your password has been reset!', null, true); }); } diff --git a/ngClient/js/app/controllers/content/AllInOneController.js b/ngClient/_system/js/app/controllers/content/AllInOneController.js similarity index 100% rename from ngClient/js/app/controllers/content/AllInOneController.js rename to ngClient/_system/js/app/controllers/content/AllInOneController.js diff --git a/ngClient/js/app/controllers/content/basicsController.js b/ngClient/_system/js/app/controllers/content/BasicsController.js similarity index 100% rename from ngClient/js/app/controllers/content/basicsController.js rename to ngClient/_system/js/app/controllers/content/BasicsController.js diff --git a/ngClient/js/app/controllers/content/DefaultController.js b/ngClient/_system/js/app/controllers/content/DefaultController.js similarity index 96% rename from ngClient/js/app/controllers/content/DefaultController.js rename to ngClient/_system/js/app/controllers/content/DefaultController.js index c6078f66f..5343e1109 100644 --- a/ngClient/js/app/controllers/content/DefaultController.js +++ b/ngClient/_system/js/app/controllers/content/DefaultController.js @@ -83,8 +83,8 @@ } // Remove anonymousUserWarning toastr in register & login pages, if there is - if (($location.path() === '/account/register' || - $location.path() === '/account/login') && + if (($location.path() === '/_system/account/register' || + $location.path() === '/_system/account/login') && anonymousUserWarning !== null) { anonymousUserWarning.remove(); } diff --git a/ngClient/js/app/controllers/content/introductionController.js b/ngClient/_system/js/app/controllers/content/IntroductionController.js similarity index 100% rename from ngClient/js/app/controllers/content/introductionController.js rename to ngClient/_system/js/app/controllers/content/IntroductionController.js diff --git a/ngClient/js/app/controllers/content/KnowledgeIndexController.js b/ngClient/_system/js/app/controllers/content/KnowledgeIndexController.js similarity index 100% rename from ngClient/js/app/controllers/content/KnowledgeIndexController.js rename to ngClient/_system/js/app/controllers/content/KnowledgeIndexController.js diff --git a/ngClient/js/app/controllers/content/PriorityIndexController.js b/ngClient/_system/js/app/controllers/content/PriorityIndexController.js similarity index 100% rename from ngClient/js/app/controllers/content/PriorityIndexController.js rename to ngClient/_system/js/app/controllers/content/PriorityIndexController.js diff --git a/ngClient/js/app/controllers/content/TotalCostIndexController.js b/ngClient/_system/js/app/controllers/content/TotalCostIndexController.js similarity index 100% rename from ngClient/js/app/controllers/content/TotalCostIndexController.js rename to ngClient/_system/js/app/controllers/content/TotalCostIndexController.js diff --git a/ngClient/js/app/controllers/content/obsolete/FairShareIndexSampleController.js b/ngClient/_system/js/app/controllers/content/obsolete/FairShareIndexSampleController.js similarity index 100% rename from ngClient/js/app/controllers/content/obsolete/FairShareIndexSampleController.js rename to ngClient/_system/js/app/controllers/content/obsolete/FairShareIndexSampleController.js diff --git a/ngClient/js/app/controllers/content/obsolete/ResourcePoolRateSampleController.js b/ngClient/_system/js/app/controllers/content/obsolete/ResourcePoolRateSampleController.js similarity index 100% rename from ngClient/js/app/controllers/content/obsolete/ResourcePoolRateSampleController.js rename to ngClient/_system/js/app/controllers/content/obsolete/ResourcePoolRateSampleController.js diff --git a/ngClient/js/app/controllers/resourcePool/resourcePoolListController.js b/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolListController.js similarity index 100% rename from ngClient/js/app/controllers/resourcePool/resourcePoolListController.js rename to ngClient/_system/js/app/controllers/resourcePool/ResourcePoolListController.js diff --git a/ngClient/js/app/controllers/resourcePool/ResourcePoolManageController.js b/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolManageController.js similarity index 97% rename from ngClient/js/app/controllers/resourcePool/ResourcePoolManageController.js rename to ngClient/_system/js/app/controllers/resourcePool/ResourcePoolManageController.js index 42a239019..055a686b1 100644 --- a/ngClient/js/app/controllers/resourcePool/ResourcePoolManageController.js +++ b/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolManageController.js @@ -57,7 +57,7 @@ vm.isElementFieldNew = true; vm.isElementItemEdit = false; vm.isElementItemNew = true; - vm.isNew = $location.path() === '/resourcePool/new'; + vm.isNew = $location.path() === '/_system/resourcePool/new'; vm.isSaveEnabled = isSaveEnabled; vm.isSaving = false; vm.openCopyModal = openCopyModal; @@ -101,7 +101,7 @@ // Not found, navigate to 404 if (resourcePool === null) { - $location.url('/content/404'); + $location.url('/_system/content/404'); return; } @@ -222,8 +222,8 @@ resourcePoolFactory.cancelResourcePool(vm.resourcePool); var locationPath = vm.isNew ? - '/resourcePool' : - '/resourcePool/' + vm.resourcePool.Id; + '/_system/resourcePool' : + '/_system/resourcePool/' + vm.resourcePool.Id; $location.url(locationPath); } @@ -369,13 +369,13 @@ if (currentUser.isAuthenticated()) { resourcePoolFactory.saveChanges() .then(function () { - $location.url('/resourcePool'); + $location.url('/_system/resourcePool'); }) .finally(function () { vm.isSaving = false; }); } else { - $location.url('/resourcePool'); + $location.url('/_system/resourcePool'); vm.isSaving = false; } }); @@ -481,7 +481,7 @@ if (currentUser.isAuthenticated()) { resourcePoolFactory.saveChanges() .then(function () { - $location.url('/resourcePool/' + vm.resourcePool.Id); + $location.url('/_system/resourcePool/' + vm.resourcePool.Id); }) .finally(function () { vm.isSaving = false; @@ -489,7 +489,7 @@ } else { resourcePoolFactory.acceptChanges(vm.resourcePool); vm.isSaving = false; - $location.url('/resourcePool/' + vm.resourcePool.Id); + $location.url('/_system/resourcePool/' + vm.resourcePool.Id); } }); } diff --git a/ngClient/js/app/controllers/resourcePool/resourcePoolViewController.js b/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolViewController.js similarity index 96% rename from ngClient/js/app/controllers/resourcePool/resourcePoolViewController.js rename to ngClient/_system/js/app/controllers/resourcePool/ResourcePoolViewController.js index b51511fd2..d739c16a1 100644 --- a/ngClient/js/app/controllers/resourcePool/resourcePoolViewController.js +++ b/ngClient/_system/js/app/controllers/resourcePool/ResourcePoolViewController.js @@ -29,7 +29,7 @@ // Not found, navigate to 404 if (resourcePool === null) { - $location.url('/content/404'); + $location.url('/_system/content/404'); return; } diff --git a/ngClient/js/app/directives/resourcePoolEditor/resourcePoolEditor.css b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.css similarity index 100% rename from ngClient/js/app/directives/resourcePoolEditor/resourcePoolEditor.css rename to ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.css diff --git a/ngClient/js/app/directives/resourcePoolEditor/resourcePoolEditor.html b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html similarity index 100% rename from ngClient/js/app/directives/resourcePoolEditor/resourcePoolEditor.html rename to ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html diff --git a/ngClient/js/app/directives/resourcePoolEditor/resourcePoolEditor.js b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js similarity index 98% rename from ngClient/js/app/directives/resourcePoolEditor/resourcePoolEditor.js rename to ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js index 7f74c37f9..91446c785 100644 --- a/ngClient/js/app/directives/resourcePoolEditor/resourcePoolEditor.js +++ b/ngClient/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.js @@ -103,7 +103,7 @@ function editResourcePool() { // TODO Instead of having fixed url here, broadcast an 'edit request'? - $location.url('/resourcePool/' + scope.resourcePoolId + '/edit'); + $location.url('/_system/resourcePool/' + scope.resourcePoolId + '/edit'); } function increaseElementCellNumericValue(cell) { @@ -402,7 +402,7 @@ return { restrict: 'E', - templateUrl: '/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.48.0', + templateUrl: '/_system/js/app/directives/resourcePoolEditor/resourcePoolEditor.html?v=0.49.0', scope: { config: '=' }, diff --git a/ngClient/js/app/entities/Element.js b/ngClient/_system/js/app/entities/Element.js similarity index 100% rename from ngClient/js/app/entities/Element.js rename to ngClient/_system/js/app/entities/Element.js diff --git a/ngClient/js/app/entities/ElementCell.js b/ngClient/_system/js/app/entities/ElementCell.js similarity index 100% rename from ngClient/js/app/entities/ElementCell.js rename to ngClient/_system/js/app/entities/ElementCell.js diff --git a/ngClient/js/app/entities/ElementField.js b/ngClient/_system/js/app/entities/ElementField.js similarity index 100% rename from ngClient/js/app/entities/ElementField.js rename to ngClient/_system/js/app/entities/ElementField.js diff --git a/ngClient/js/app/entities/ElementItem.js b/ngClient/_system/js/app/entities/ElementItem.js similarity index 100% rename from ngClient/js/app/entities/ElementItem.js rename to ngClient/_system/js/app/entities/ElementItem.js diff --git a/ngClient/js/app/entities/Enums.js b/ngClient/_system/js/app/entities/Enums.js similarity index 100% rename from ngClient/js/app/entities/Enums.js rename to ngClient/_system/js/app/entities/Enums.js diff --git a/ngClient/js/app/entities/ResourcePool.js b/ngClient/_system/js/app/entities/ResourcePool.js similarity index 100% rename from ngClient/js/app/entities/ResourcePool.js rename to ngClient/_system/js/app/entities/ResourcePool.js diff --git a/ngClient/js/app/entities/User.js b/ngClient/_system/js/app/entities/User.js similarity index 100% rename from ngClient/js/app/entities/User.js rename to ngClient/_system/js/app/entities/User.js diff --git a/ngClient/js/app/entities/UserElementCell.js b/ngClient/_system/js/app/entities/UserElementCell.js similarity index 100% rename from ngClient/js/app/entities/UserElementCell.js rename to ngClient/_system/js/app/entities/UserElementCell.js diff --git a/ngClient/js/app/entities/UserElementField.js b/ngClient/_system/js/app/entities/UserElementField.js similarity index 100% rename from ngClient/js/app/entities/UserElementField.js rename to ngClient/_system/js/app/entities/UserElementField.js diff --git a/ngClient/js/app/entities/UserResourcePool.js b/ngClient/_system/js/app/entities/UserResourcePool.js similarity index 100% rename from ngClient/js/app/entities/UserResourcePool.js rename to ngClient/_system/js/app/entities/UserResourcePool.js diff --git a/ngClient/js/app/factories/applicationFactory.js b/ngClient/_system/js/app/factories/applicationFactory.js similarity index 100% rename from ngClient/js/app/factories/applicationFactory.js rename to ngClient/_system/js/app/factories/applicationFactory.js diff --git a/ngClient/js/app/factories/dataContext.js b/ngClient/_system/js/app/factories/dataContext.js similarity index 100% rename from ngClient/js/app/factories/dataContext.js rename to ngClient/_system/js/app/factories/dataContext.js diff --git a/ngClient/js/app/factories/entityManagerFactory.js b/ngClient/_system/js/app/factories/entityManagerFactory.js similarity index 100% rename from ngClient/js/app/factories/entityManagerFactory.js rename to ngClient/_system/js/app/factories/entityManagerFactory.js diff --git a/ngClient/js/app/factories/generated/resourcePoolFactory.js b/ngClient/_system/js/app/factories/generated/resourcePoolFactory.js similarity index 100% rename from ngClient/js/app/factories/generated/resourcePoolFactory.js rename to ngClient/_system/js/app/factories/generated/resourcePoolFactory.js diff --git a/ngClient/js/app/factories/generated/userFactory.js b/ngClient/_system/js/app/factories/generated/userFactory.js similarity index 100% rename from ngClient/js/app/factories/generated/userFactory.js rename to ngClient/_system/js/app/factories/generated/userFactory.js diff --git a/ngClient/js/app/factories/locationHistory.js b/ngClient/_system/js/app/factories/locationHistory.js similarity index 95% rename from ngClient/js/app/factories/locationHistory.js rename to ngClient/_system/js/app/factories/locationHistory.js index 867a0abea..d7c92bf9a 100644 --- a/ngClient/js/app/factories/locationHistory.js +++ b/ngClient/_system/js/app/factories/locationHistory.js @@ -89,8 +89,8 @@ function url() { return self.resourcePool !== null ? self.isEdit ? - '/resourcePool/' + self.resourcePool.Id + '/edit' : - '/resourcePool/' + self.resourcePool.Id : + '/_system/resourcePool/' + self.resourcePool.Id + '/edit' : + '/_system/resourcePool/' + self.resourcePool.Id : self.itemUrl; } } diff --git a/ngClient/js/app/factories/logger.js b/ngClient/_system/js/app/factories/logger.js similarity index 100% rename from ngClient/js/app/factories/logger.js rename to ngClient/_system/js/app/factories/logger.js diff --git a/ngClient/js/app/factories/resourcePoolFactory.js b/ngClient/_system/js/app/factories/resourcePoolFactory.js similarity index 100% rename from ngClient/js/app/factories/resourcePoolFactory.js rename to ngClient/_system/js/app/factories/resourcePoolFactory.js diff --git a/ngClient/js/app/factories/userFactory.js b/ngClient/_system/js/app/factories/userFactory.js similarity index 100% rename from ngClient/js/app/factories/userFactory.js rename to ngClient/_system/js/app/factories/userFactory.js diff --git a/ngClient/js/app/filters/angular-enum.js b/ngClient/_system/js/app/filters/angular-enum.js similarity index 100% rename from ngClient/js/app/filters/angular-enum.js rename to ngClient/_system/js/app/filters/angular-enum.js diff --git a/ngClient/js/app/filters/angular-numberSymbol.js b/ngClient/_system/js/app/filters/angular-numberSymbol.js similarity index 100% rename from ngClient/js/app/filters/angular-numberSymbol.js rename to ngClient/_system/js/app/filters/angular-numberSymbol.js diff --git a/ngClient/js/app/filters/angular-percentage.js b/ngClient/_system/js/app/filters/angular-percentage.js similarity index 100% rename from ngClient/js/app/filters/angular-percentage.js rename to ngClient/_system/js/app/filters/angular-percentage.js diff --git a/ngClient/js/app/main.js b/ngClient/_system/js/app/main.js similarity index 100% rename from ngClient/js/app/main.js rename to ngClient/_system/js/app/main.js diff --git a/ngClient/js/appSettings/Setup/0 Readme.txt b/ngClient/_system/js/appSettings/Setup/0 Readme.txt similarity index 100% rename from ngClient/js/appSettings/Setup/0 Readme.txt rename to ngClient/_system/js/appSettings/Setup/0 Readme.txt diff --git a/ngClient/js/appSettings/Setup/appSettings.js b/ngClient/_system/js/appSettings/Setup/appSettings.js similarity index 100% rename from ngClient/js/appSettings/Setup/appSettings.js rename to ngClient/_system/js/appSettings/Setup/appSettings.js diff --git a/ngClient/_system/js/appSettings/appSettings.js b/ngClient/_system/js/appSettings/appSettings.js new file mode 100644 index 000000000..30771f44a --- /dev/null +++ b/ngClient/_system/js/appSettings/appSettings.js @@ -0,0 +1,11 @@ +(function () { + 'use strict'; + + var main = angular.module('main'); + + main.constant('serviceAppUrl', 'http://localhost:15001') + .constant('analyticsTrackingCode', '') + .constant('analyticsDomainName', '') + .constant('disqusShortname', 'wealtheconomy'); + +})(); diff --git a/ngClient/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js b/ngClient/_system/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js similarity index 100% rename from ngClient/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js rename to ngClient/_system/js/lib/breeze-client/build/adapters/breeze.dataService.odata.js diff --git a/ngClient/_system/js/lib/lib.js b/ngClient/_system/js/lib/lib.js new file mode 100644 index 000000000..ada4c9033 --- /dev/null +++ b/ngClient/_system/js/lib/lib.js @@ -0,0 +1,102353 @@ +/*! + * jQuery JavaScript Library v2.2.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-02-22T19:11Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var arr = []; + +var document = window.document; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "2.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // 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 just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +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; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // 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 ( i === length ) { + 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( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.constructor && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + + // If the function hasn't returned already, we're confident that + // |obj| is a plain object, created by {} or constructed with new Object + return true; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // 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.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return 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 ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + 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 + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, 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 || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = 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).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "
" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "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; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ 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 = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // 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 || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // 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( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnotwhite = ( /\S+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * 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( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + 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.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +} ); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend( { + + // 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 ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // 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.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +} ); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +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 ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + 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, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([\w:-]+)/ ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE9 + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE9 +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + 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 elem; + } + + 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 elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + 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 + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = 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" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // 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: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( 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; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // 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; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.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 ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // 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 + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = 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; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail 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 offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // 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 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, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( 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.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + 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.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 = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://code.google.com/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/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; + } + }; +} ); + +jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + 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 ( 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 ); + } ); + } +} ); + + +var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( 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 ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + 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 ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); + + +var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "