"use strict";function openPlayerFromTranscript(e,t,r){var n="width=1354,height=836,status=0,titlebar=0,scrollbars=0,menubar=0,toolbar=0,location=0,resizable=1";window.open(getPlayerUrlForTranscript(e,t,r),"psplayer",n)}function getPlayerUrlForTranscript(e,t,r){return t?r+"/player?"+e+"&start="+t:r+"/player?"+e}var pluralsightModule=angular.module("pluralsightModule",["ngResource","ngRoute","ipCookie","duScroll"]).value("duScrollDuration",300).run(["$location","$rootElement",function(e,t){t.off("click")}]).config(["$provide",function(e){e.decorator("$exceptionHandler",["$delegate","$injector",function(e,t){return function(r){var n=t.get("$rootScope");switch(n.exceptionMode){case"0":throw r;case"1":default:setTimeout(function(){throw r},0)}return e.apply(this,arguments)}}])}]);pluralsightModule.controller("AccountController",["$scope","UserRepository","baseUrls",function(e,t,r){function n(){e.paymentInfo.autoRenew.isAutoRenewEnabled=!e.paymentInfo.autoRenew.isAutoRenewEnabled}e.loading=!0,e.userAccount={},t.getAccountInfo().$promise.then(function(t){e.userAccount=t,e.paymentInfo=t.userAccountDetailsVm.paymentInformation,e.accountDetails=t.userAccountDetailsVm,e.loading=!1}),e.hasIndividualSubscription=function(){return e.userAccount.loaded&&e.userAccount.userAccountDetailsVm.individualSubscription},e.isAutoRenewEnabled=function(){return e.paymentInfo&&e.paymentInfo.autoRenew&&e.paymentInfo.autoRenew.isAutoRenewEnabled},e.hasCorporateSubscription=function(){return e.userAccount.loaded&&e.userAccount.userAccountDetailsVm.corpSubscription},e.hasSingleCourseSubscriptions=function(){return e.userAccount.loaded&&e.userAccount.userAccountDetailsVm.singleCourseSubscriptions.length>0},e.hasIndiaRegionalRestriction=function(){return e.userAccount.loaded&&e.userAccount.regionalRestrictionInfo},e.hasLibrarySubscription=function(){return!e.userAccount.loaded||e.userAccount.userAccountDetailsVm.individualSubscription||e.userAccount.userAccountDetailsVm.corpSubscription},e.getPlanUrl=function(e){var t=e.isStructuredPlan?"/StructuredPlan/Manage":"/GroupPlan/Manage";return r.mainWebUrl+t+"?planName="+e.planName},e.getTeamUrl=function(e){var t=e.isStructuredPlan?"/StructuredPlan/ManageTeam":"/GroupPlan/Manage",n=r.mainWebUrl+t+"?planName="+e.planName;return e.isStructuredPlan&&(n+="&teamName="+e.teamName),n},e.userManagesPlans=function(){return e.userAccount.loaded&&e.userAccount.groupPlan&&e.userAccount.groupPlan.plansManaged.length>0},e.userManagesTeams=function(){return e.userAccount.loaded&&e.userAccount.groupPlan&&e.userAccount.groupPlan.teamsManaged.length>0},e.toggleAutoRenew=function(){e.toggleAutoRenewFailed=!1,n(),t.toggleAutoRenew().$promise.then(function(){},function(){n(),e.toggleAutoRenewFailed=!0})},e.isTrial=function(){return e.hasIndividualSubscription()&&e.userAccount.userAccountDetailsVm.individualSubscription.showCancelTrialButton}}]),pluralsightModule.controller("ChangePasswordController",["$scope","UserRepository",function(e,t){e.password={"old":"","new":"","reentered":"","updateAttempted":!1,"updateSucceeded":!1},e.passwordClass=function(){return e.oldPasswordIncorrect()?"error":""},e.resetAttempt=function(){e.password.updateAttempted=!1,e.password.updateSucceeded=!1},e.oldPasswordIncorrect=function(){return e.password.updateAttempted&&!e.password.updateSucceeded?!0:!1},e.newPasswordClass=function(){return e.passwordCorrectLength()?"":"error"},e.passwordCorrectLength=function(){return 0==e.password["new"].length||e.password["new"].length>=6&&e.password["new"].length<=128},e.reenterPasswordClass=function(){return e.passwordsMatch()?"":"error"},e.passwordsMatch=function(){return 0==e.password.reentered.length||e.password["new"]==e.password.reentered},e.passwordUpdateRequestValid=function(){return e.password.old.length>0&&e.password["new"].length>0&&e.passwordCorrectLength()&&e.password.reentered.length>0&&e.passwordsMatch()},e.allowPasswordChange=function(){return e.passwordUpdateRequestValid()?"green button":"green button disabled"},e.changePassword=function(){e.passwordUpdateRequestValid()&&(t.updatePassword(e.password.old,e.password["new"]).$promise.then(function(){},function(){e.password.updateSucceeded=!1}),e.password.old="",e.password["new"]="",e.password.reentered="",e.password.updateAttempted=!0,e.password.updateSucceeded=!0)}}]),pluralsightModule.controller("ChangeSubscriptionController",["$scope","$location","UserRepository",function(e,t,r){e.loading=!0,r.getChangeSubscriptionInfo().$promise.then(function(t){e.subscriptionInfo=t,e.loading=!1},function(){e.errorMessage="An error occured",e.loading=!1}),e.changeSubscription=function(e){e&&t.path("/"+e)}}]),pluralsightModule.controller("ConfirmSubscriptionChangeController",["$scope","UserRepository","$routeParams","$sce","$window",function(e,t,r,n,o){e.loading=!0,e.clicked=!1,t.getConfirmSubscriptionChangeInfo(r.sku).$promise.then(function(t){e.confirmInfo=t,e.confirmInfo.changeSummary.selectedSubscriptionActivationHtml=n.trustAsHtml(e.confirmInfo.changeSummary.selectedSubscriptionActivationHtml),e.confirmInfo.changeSummary.termChangeHtml=n.trustAsHtml(e.confirmInfo.changeSummary.termChangeHtml),e.confirmInfo.changeSummary.pricing.upfrontPayment.explanationHtml=n.trustAsHtml(e.confirmInfo.changeSummary.pricing.upfrontPayment.explanationHtml),e.loading=!1},function(){e.errorMessage="An error occured",e.loading=!1}),e.hasFeatureChanges=function(){return e.confirmInfo&&e.confirmInfo.changeSummary.featureChange.changingFeatures.length>0},e.featureClass=function(){return e.confirmInfo.changeSummary.featureChange.isUpgrade?"fi-check":"fi-x"},e.confirmChange=function(){e.clicked||(e.clicked=!0,t.confirmChangeSubscription(r.sku).$promise.then(function(){o.location.href="/account"},function(){e.failed=!0}))}}]),pluralsightModule.controller("AssessmentTranscriptController",["$scope","AssessmentTranscriptRepository","$window",function(e,t,r){e.loading=!0,e.transcript=t.get().$promise.then(function(t){e.transcript=t,e.hasWorkingOnAssessments=t.notPassedAssessmentResults&&0!=t.notPassedAssessmentResults.length,e.hasPassedAssessments=t.passedAssessmentResults&&0!=t.passedAssessmentResults.length,r.document.title=t.transcriptTitle,e.loading=!1})}]),pluralsightModule.service("AssessmentTranscriptRepository",["$resource","baseUrls",function(e,t){return{"get":function(){return e(t.dataUrl+"/assessmenttranscript",{},{"get":{"method":"GET","withCredentials":!0}}).get()}}}]),pluralsightModule.filter("percentage",["$filter",function(e){return function(t,r){return t||(t=0),e("number")(100*t,r)+"%"}}]),pluralsightModule.controller("AuthenticationController",["$scope","UserRepository","$window","baseUrls",function(e,t,r,n){function o(e){return e.replace("#/","")}e.userLoadedSuccessfully=function(e){if(e.backgroundAuthenticationRequired){var t=n.mvcUrl+"/signin/stagebackgroundsignin?returnUrl="+r.location.href;r.location.replace(t)}},e.loadUserInfo=function(){e.user=t.getBasicInfo(e.userLoadedSuccessfully)},e.loadUserInfo(),e.isAuthenticated=function(){return e.user.loaded&&e.user.authenticated},e.isUnAuthenticated=function(){return e.user.loaded&&!e.user.authenticated},e.signOut=function(){t.signOut(o(r.location.href)).$promise.then(function(e){r.location.href=e.redirectUrl})},e.signIn=function(){r.location.href=n.mvcUrl+"/signin?ReturnUrl="+encodeURIComponent(o(r.location.href))}}]),pluralsightModule.controller("AuthorController",["$scope","$rootScope","$routeParams","$route","$sce","AuthorRepository","AuthorLinksService","$window","baseUrls",function(e,t,r,n,o,s,a,i){function u(){i.location.replace("/authors")}e.$on("$routeChangeSuccess",function(){return r.handle?(e.loading=!0,void s.get(r.handle).$promise.then(function(r){document.title=r.fullName+" – Pluralsight author",t.meta={"description":r.shortBio},e.author=r,e.author.longBio=o.trustAsHtml(r.longBio),angular.forEach(e.author.courses,function(e){e.authorLinks=a.getAuthorLinks(e.authors,e.name)}),e.loading=!1},function(){u()})):void u()})}]),pluralsightModule.service("AuthorRepository",["$resource","baseUrls",function(e,t){return{"get":function(r){return e(t.dataUrl+"/author/"+r,{},{"get":{"method":"GET","withCredentials":!0}}).get()},"getAuthors":function(){return e(t.dataUrl+"/authors",{},{"get":{"method":"GET"}}).get()}}}]),pluralsightModule.controller("AuthorsController",["$scope","AuthorRepository",function(e,t){e.loading=!0,t.getAuthors().$promise.then(function(t){e.authors=t,e.loading=!1})}]),pluralsightModule.service("BookmarkRepository",["$resource","baseUrls",function(e,t){return{"get":function(){return e(t.dataUrl+"/bookmarks",{},{"getArray":{"method":"GET","withCredentials":!0,"isArray":!0}}).getArray({},function(e){e.loaded=!0})},"toggle":function(r){return e(t.dataUrl+"/bookmarks/toggle",{},{"save":{"method":"POST","withCredentials":!0}}).save(r)},"delete":function(r){return e(t.dataUrl+"/bookmarks/delete/"+r,{},{"delete":{"method":"DELETE","withCredentials":!0}})["delete"]()}}}]),pluralsightModule.directive("bookmarks",function(){return{"restrict":"E","templateUrl":"/templates/user/bookmarks.html","controller":"BookmarksController","controllerAs":"bookmarksController","replace":!0,"scope":{"narrow":"=?","pageSize":"@?","showFilter":"@?","trackClicks":"@?"}}}).controller("BookmarksController",["$scope","PlayerService","BookmarkRepository","GoogleDataLayerService",function(e,t,r,n){var o=this;o.maxPageSize=9999,e.bookmarksPageSize=e.pageSize?e.pageSize:o.maxPageSize,e.loading=!0,r.get().$promise.then(function(t){o.bookmarks=t,e.loading=!1},function(){e.loading=!1}),o.deleteBookmark=function(e){o.deleteBookmarkFailed=!1;var t=_.find(o.bookmarks,function(t){return t.id==e}),n=_.indexOf(o.bookmarks,t);o.bookmarks=_.without(o.bookmarks,t),r["delete"](e).$promise.then(function(){},function(){o.deleteBookmarkFailed=!0,o.bookmarks.splice(n,0,t)})},o.openPlayer=function(e){t.openPlayer(e.authorName,e.moduleName,e.clipIndex,e.courseName)},o.trackClick=function(t){e.trackClicks&&n.pushDashboardClick("Bookmark",t+1)}}]),pluralsightModule.controller("ContactUsController",["$scope","ContactUsRepository","GoogleDataLayerService",function(e,t,r){e.contact={"informationRequested":"Enterprise Plans"},e.sendEnterpriseContact=function(n){t.save(n).$promise.then(function(){e.contactSubmitted=!0,e.serverErrorMessages=[],r.pushVpv({"isMessageSent":!0,"sendFailed":!1},!0)},function(t){e.contactSubmitted=!1,e.serverErrorMessages=t.data,r.pushVpv({"isMessageSent":!1,"sendFailed":!0},!0)})},e.emailFieldBlur=function(e){e["contact.email"].$dirty&&e["contact.email"].$invalid&&r.pushVpv({"substep":"form_error"},!0)}}]),pluralsightModule.factory("ContactUsRepository",["$resource","baseUrls",function(e,t){return{"save":function(r){var n=e(t.dataUrl+"/contactus").save(r);return n}}}]),pluralsightModule.controller("BusinessController",["$scope","BusinessPricingRepository","$anchorScroll",function(e,t,r){r(),e.numberOfUsers=2,e.userCounts=[],e.pricing=t.get();for(var n=2;26>n;n++)e.userCounts.push(n)}]),pluralsightModule.service("BusinessPricingRepository",["$resource","baseUrls",function(e,t){return{"get":function(){var r=e(t.dataUrl+"/pricing/business").get();return r}}}]),pluralsightModule.controller("BusinessPurchaseController",["$scope","BusinessPurchaseModel","$location","$window","$document","baseUrls","SmallBusinessPardotFormSubmitter","OptimizelyService",function(e,t,r,n,o,s,a,i){function u(){o.scrollTopAnimated(0)}function l(){var e=t.contact,r={"contact.email":e.email,"contact.firstName":e.firstName,"contact.lastName":e.lastName,"Skus.SelectedValue":t.plan.sku,"contact.teamSize":e.teamSize,"contact.phoneNumber":e.phoneNumber,"contact.company":e.company,"contact.jobTitle":e.jobTitle,"plan.numUsers":t.plan.numUsers};"ENT-Y-STD"===t.plan.sku?a.sendStep1Annual(r):a.sendStep1AnnualPlus(r)}function c(){n.location.href="/business"}function d(e){return"ENT-Y-STD"==e||"ENT-Y-PLUS"==e}function p(e){return/\d+/.test(e)}var g=r.search();d(g.sku)&&p(g.numUsers)||c(),t.plan.sku=r.search().sku,t.plan.description="ENT-Y-STD"==g.sku?"Small Business Annual":"Small Business Annual Plus",t.plan.numUsers=parseInt(r.search().numUsers,10),e.plan=t.plan,e.contact=t.contact,e.paymentInfo=t.paymentInfo,e.nationalEntities=t.nationalEntities,e.mainWebUrl=s.mainWebUrl,e.contentUrl=s.contentUrl,e.gotoPage1=function(){r.path("/"),u()},e.gotoPaymentPage=function(e){e&&l(),r.path("/payment"),u()},e.gotoConfirmPage=function(){var e=t.paymentInfo,n={"paymentInfo.country":e.country.code,"paymentInfo.streetAddress":e.streetAddress,"paymentInfo.city":e.city,"paymentInfo.state":e.state?e.state.code:"","paymentInfo.postalCode":e.postalCode,"contact.email":t.contact.email};"ENT-Y-STD"===t.plan.sku?a.sendStep2Annual(n):a.sendStep2AnnualPlus(n),r.path("/confirm"),u(),i.pushEvent("reachedConfirmationPage")},e.getExpirationDate=function(){var e=new Date,t=e.getFullYear()+1;return e.setFullYear(t),e},e.getPricePerUser=function(){return t.getPricePerUser()},e.getTotalPrice=function(){return t.getTotalPrice()},e.showStateField=function(){return e.paymentInfo.country&&e.paymentInfo.country.subnationalEntities.length>0},e.clearState=function(){e.paymentInfo.state=null},e.purchase=function(){e.isPurchasing=!0,t.purchase().$promise.then(function(n){r.search("sku",null),r.search("numUsers",null),r.search("planName",n.planName),t.googleAnalytics=n.googleAnalytics,t.affiliatePixel=n.affiliatePixel,e.loadUserInfo(),r.path("/thank-you"),i.pushEvent("reachedThank-YouPage")},function(t){e.errorMessages=t.data.errorMessages,e.fatalMessages=t.data.fatalMessages})["finally"](function(){t.paymentInfo.creditCardNumber="",t.paymentInfo.cvv=""})}}]),pluralsightModule.factory("BusinessPurchaseModel",["NationalEntitiesRepository","BusinessPurchaseRepository","BusinessPricingRepository",function(e,t,r){function n(){var e=(new Date).getFullYear(),t=_.map(_.range(e,e+25),function(e){return e.toString()});return{"years":t}}var o=r.get();return{"paymentInfo":n(),"contact":{},"plan":{},"googleAnalytics":{},"affiliatePixel":{},"nationalEntities":e.get(),"getPricePerUser":function(){return"ENT-Y-STD"===this.plan.sku?o.basicPrice:o.plusPrice},"getTotalPrice":function(){var e="ENT-Y-STD"===this.plan.sku?o.basicPrice:o.plusPrice;return e*this.plan.numUsers},"purchase":function(){var e={"numUsers":this.plan.numUsers,"sku":this.plan.sku,"planSummary":{"displayName":this.plan.description,"numUsers":this.plan.numUsers},"adminContactInfo":{"email":this.contact.email,"firstName":this.contact.firstName,"lastName":this.contact.lastName,"company":this.contact.company,"phoneNumber":this.contact.phoneNumber,"jobTitle":this.contact.jobTitle,"numDevelopers":this.contact.teamSize},"creditCardEditor":{"firstName":this.paymentInfo.firstName,"lastName":this.paymentInfo.lastName,"addressEditorInfo":{"streetAddress":this.paymentInfo.streetAddress,"city":this.paymentInfo.city,"state":this.paymentInfo.state?this.paymentInfo.state.code:"","postalCode":this.paymentInfo.postalCode,"country":this.paymentInfo.country.code},"creditCard":{"isEditMode":!0,"number":this.paymentInfo.creditCardNumber,"cvv":this.paymentInfo.cvv,"expirationMonth":this.paymentInfo.expirationMonth,"expirationYear":this.paymentInfo.expirationYear}},"shortLicenseAgreement":{"hasAgreedToTermsAndConditions":this.paymentInfo.agreedToTerms}};return t.purchase(e)}}}]),pluralsightModule.service("BusinessPurchaseRepository",["$resource","baseUrls",function(e,t){return{"purchase":function(r){return e(t.dataUrl+"/business/subscribe",{},{"save":{"method":"POST"}}).save(r)}}}]),pluralsightModule.controller("BusinessThankyouController",["$scope","$location","baseUrls","BusinessPurchaseModel","GoogleDataLayerService","SmallBusinessPardotFormSubmitter",function(e,t,r,n,o,s){function a(){if(n.googleAnalytics.transactionId){var e={"event":"purchase","transactionId":n.googleAnalytics.transactionId,"transactionTotal":n.googleAnalytics.total,"transactionProducts":[{"sku":n.googleAnalytics.sku,"name":n.googleAnalytics.name,"category":n.googleAnalytics.category,"price":n.googleAnalytics.price,"quantity":n.googleAnalytics.quantity}]};o.push(e)}}function i(){n.contact.email&&s.sendStep3({"UserInfo.Email":n.contact.email,"planid":e.planName})}e.mainWebUrl=r.mainWebUrl,e.contentUrl=r.contentUrl,e.planName=t.search().planName,e.affiliatePixel=n.affiliatePixel,a(),i()}]),pluralsightModule.directive("repeatingSelectList",function(){return{"restrict":"E","template":'<select ng-model="selectedValue" ng-options="number + \' \' + displayTextSuffix for number in sequence"></select>',"replace":!0,"scope":{"start":"=","end":"=","displayTextSuffix":"@?","selectedValue":"="},"link":function(e){e.sequence=[];for(var t=2;26>t;t++)e.sequence.push(t)}}}),pluralsightModule.controller("DashboardController",["$scope","ProfileRepository",function(e,t){t.get().$promise.then(function(t){e.profileData=t,e.loading=!1},function(){})}]),pluralsightModule.directive("dashboard",function(){return{"restrict":"E","templateUrl":"/templates/dashboard/dashboard.html","controller":"DashboardController","controllerAs":"dashboardController","replace":!0,"scope":{"beginnerLevelImage":"@","intermediateLevelImage":"@","advancedLevelImage":"@","showPlaylist":"=","arrowUpImageUrl":"@","arrowDownImageUrl":"@"}}}).controller("DashboardController",["$scope","ProfileRepository","baseUrls",function(e,t,r){this.profileData=t.get(),this.mainWebUrl=r.mainWebUrl}]),pluralsightModule.controller("AssessmentController",["$scope","CourseRepository","AssessmentRepository","$routeParams","$http","baseUrls","$location",function(e,t,r,n,o,s,a){function i(e){a.path("assessment-player/"+n.courseName).search("id",e)}e.clearTabs(),e.tabClasses.assessment="active",t.getAssessmentInfo(n.courseName).$promise.then(function(t){e.assessmentInfo=t,e.assessmentInfo.loaded=t.loaded}),e.showPartial=function(t){return e.assessmentInfo&&t==e.assessmentInfo.partialViewName},e.showTrialMessage=function(){return!!e.assessmentInfo&&!!e.assessmentInfo.trialLimit},e.assessmentIsForCurrentCourse=function(e){return"sample-course"==e||n.courseName==e},e.resumeAssessment=function(t){e.assessmentIsForCurrentCourse(t)?i(e.assessmentInfo.inProgressAssessmentId):a.path("assessment/"+t)},e.subscribeUrl=function(){return s.mvcUrl+"/subscribe/step1"},e.upgradeUrl=function(){return e.assessmentInfo?s.mainWebUrl+"/account/changesubscription?userhandle="+e.assessmentInfo.handle:""},e.startSampleAssessment=function(){e.startAssessmentFailed=!1,r.startSampleAssessment().$promise.then(function(e){i(e.id)},function(){e.startAssessmentFailed=!0})},e.startAssessment=function(){e.startAssessmentFailed=!1,r.startAssessment(n.courseName).$promise.then(function(e){i(e.id)},function(){e.startAssessmentFailed=!0})}}]),pluralsightModule.controller("AssessmentPlayerController",["$scope","$routeParams","baseUrls","$interval","PlayerService","AssessmentRepository","$sce","$location","$window",function(e,t,r,n,o,s,a,i,u){function l(t){t.currentQuestion.questionKey&&(e.question.relatedClipUrl=r.mainWebUrl+"/player?"+t.currentQuestion.questionKey.playerUrl,e.question.wasAnsweredCorrectly=e.question.questionKey.isSelectedAnswerCorrect);var n=_.findWhere(e.question.answers,{"isSelected":!0});e.question.selectedAnswer=n?n.index:void 0,e.question.answered=e.question.isQuestionFinished,e.question.feedback={},d()}function c(){i.path("assessment/"+t.courseName)}function d(){e.question.timer=p(e.question.timeRemaining),e.question.text=a.trustAsHtml(e.question.text),angular.forEach(e.question.answers,function(e){e.text=a.trustAsHtml(e.text)})}function p(e){return new Date(2e3,0,1,e.hours,e.minutes,e.seconds,0)}function g(e){return new Date(e.valueOf()-1e3)}function f(e){return e&&(0!=e.getMinutes()||0!=e.getSeconds())}function m(){f(e.assessment.timer)||(e.assessment=s.getAssessmentById(w),e.finished=!0,n.cancel(b))}function h(){f(e.question.timer)||v(e.question.selectedAnswer)}function v(t){s.submitAnswer(w,t).$promise.then(function(t){e.question.wasAnsweredCorrectly=t.wasAnsweredCorrectly,e.question.relatedClip=t.relatedClip,e.question.submissionError=!1,e.question.answered=!0},function(){e.question.submissionError=!0,e.question.answered=!1})}function y(){e.assessment.assessmentIsSample?c():C()}function C(){u.location.href="/transcript"}if(e.clearTabs(),e.tabClasses.assessment="active",!i.search().id)return void c();var w=i.search().id;s.getAssessmentById(w).$promise.then(function(t){return t.currentQuestion?(e.assessment=t,t.timeRemaining.isTimedOut?void m():(e.assessment.timer=p(t.timeRemaining),e.question=t.currentQuestion,void l(t))):void c()},function(){c()}),e.meterStyle=function(){return e.assessment&&e.question?{"width":100*(e.question.index+1)/e.assessment.totalQuestions+"%"}:""},e.submitAnswer=function(e){void 0!==e&&v(e)},e.nextQuestion=function(){s.submitFeedbackAndAdvance(w,e.question.feedback.vote,e.question.feedback.comment).$promise.then(function(t){return t.succeeded?(e.question=t.question,void d()):void c()},function(){c()})},e.answerClass=function(e,t,r){return t!==r?"":e?"correct selected":"incorrect selected"},e.saveFeedback=function(e){e.submitted=!0};var b=n(function(){e.assessment&&f(e.assessment.timer)&&(e.assessment.timer=g(e.assessment.timer),m()),e.question&&f(e.question.timer)&&(e.question.timer=g(e.question.timer),h())},1e3);e.viewExplanation=function(){var t=e.question.relatedClip;t?o.openPlayer(t.author,t.module,t.clipIndex,t.course):e.question.relatedClipUrl&&o.openPlayerUrl(e.question.relatedClipUrl)},e.likeQuestion=function(){e.question.feedback.vote="Up"==e.question.feedback.vote?"":"Up"},e.dislikeQuestion=function(){e.question.feedback.vote="Down"==e.question.feedback.vote?"":"Down"},e.finishAssessment=function(){s.submitFeedbackAndAdvance(w,e.question.feedback.vote,e.question.feedback.comment).$promise.then(function(){s.getAssessmentById(w).$promise.then(function(t){e.assessment=t})["finally"](function(){e.finished=!0,n.cancel(b)})})},e.submitAssessmentFeedback=function(e){return e?void s.submitAssessmentFeedback(w,e).$promise["finally"](function(){y()}):void y()}}]),pluralsightModule.service("AssessmentRepository",["$resource","baseUrls",function(e,t){return{"getAssessmentById":function(r){return e(t.dataUrl+"/assessmentplayer/assessment/"+r,{},{"get":{"method":"GET","withCredentials":!0}}).get({})},"submitFeedbackAndAdvance":function(r,n,o){return e(t.dataUrl+"/assessmentplayer/question/"+r,{},{"save":{"method":"POST","withCredentials":!0}}).save({"assessmentId":r,"vote":n,"comment":o},function(e){e.loaded=!0})},"submitAnswer":function(r,n){return e(t.dataUrl+"/assessmentplayer/answer/",{},{"save":{"method":"POST","withCredentials":!0}}).save({"assessmentId":r,"selectedAnswer":n})},"startSampleAssessment":function(){return e(t.dataUrl+"/assessment/sample",{},{"save":{"method":"PUT","withCredentials":!0}}).save({},function(e){e.loaded=!0})},"startAssessment":function(r){return e(t.dataUrl+"/assessment/"+r,{},{"save":{"method":"PUT","withCredentials":!0}}).save({},function(e){e.loaded=!0})},"submitAssessmentFeedback":function(r,n){return e(t.dataUrl+"/assessmentplayer/feedback/",{},{"save":{"method":"POST","withCredentials":!0}}).save({"assessmentId":r,"comment":n})}}}]),pluralsightModule.factory("AuthorLinksService",function(){function e(e,t){return{"name":e.lastName,"href":"/author/"+e.handle,"delimiter":t}}function t(e,t){return{"name":e.firstName+" "+e.lastName,"href":"/author/"+e.handle,"delimiter":t}}function r(e){return{"name":"et al.","href":"/courses/description/"+e}}return{"getAuthorLinks":function(n,o){return n?1==n.length?[t(n[0])]:2==n.length?[e(n[0],","),e(n[1])]:[t(n[0],","),r(o)]:[]}}}),pluralsightModule.factory("BookmarkService",["BookmarkRepository","$q",function(e,t){function r(e,t,r){return r?r:t?t:e}function n(e){if(!e)return{"author":"","name":""};var t=e.moduleRef.split("/");return{"author":t[0],"name":t[1]}}return{"toggleBookmark":function(o,s,a){var i=r(o,s,a),u=n(s);i.isBookmarked=!i.isBookmarked;var l=t.defer(),c={"courseName":o.name,"moduleName":u.name,"moduleAuthor":u.author,"clipName":a?a.name:"","displayName":i.title};return e.toggle(c).$promise.then(function(){},function(e){i.isBookmarked=!i.isBookmarked,l.reject(e.data)}),l.promise}}}]),pluralsightModule.filter("clipDuration",function(){return function(e){if(!e)return"";var t=e.split(":");if(t.length<3)return e;var r=parseInt(t[0]);return 0!=r?r+":"+t[1]+":"+t[2]:parseInt(t[1])+":"+t[2]}}),pluralsightModule.filter("clipDurationInSeconds",function(){return function(e){for(var t=e.split(":"),r=0,n=0;n<t.length;n++)r*=60,r+=parseInt(t[n]);return r}}),pluralsightModule.controller("CourseController",["$scope","$rootScope","CourseRepository","$route","$sce","$location","AuthorLinksService","BookmarkService","PlayerService","PlaylistRepository","$window","baseUrls",function(e,t,r,n,o,s,a,i,u,l,c){e.bookmarkResult={"errorMessage":"","failed":!1},e.tabClasses={"tableOfContents":"active","exerciseFiles":"","description":"","transcript":"","assessment":"","discussion":""},e.clearTabs=function(){e.tabClasses.tableOfContents="",e.tabClasses.exerciseFiles="",e.tabClasses.description="",e.tabClasses.transcript="",e.tabClasses.assessment="",e.tabClasses.discussion=""},e.$on("$routeChangeSuccess",function(){if(n.current.originalPath){var s=n.current.originalPath.split("/");e.pageToNavigateTo=3===s.length?s[1]:""}e.course&&e.course.name==n.current.params.courseName||r.get(n.current.params.courseName).$promise.then(function(n){n.isValid?(e.course=n,e.courseRelationships=r.getCourseRelationships(n.name),e.authorLinks=a.getAuthorLinks(n.authors,n.name),r.getSocialData(n.name).$promise.then(function(t){e.social=t,e.social.fullFacebookUrl=o.trustAsResourceUrl("//www.facebook.com/plugins/like.php?href="+encodeURIComponent(e.social.friendlyRedirectingUrl)+"&layout=button_count&action=like&show_faces=true&send=true&height=21")}),document.title=n.title+" – Pluralsight Training",t.meta={"description":n.shortDescription}):c.location.replace("/tags")})}),e.showTranscriptTab=function(){return e.course&&e.course.hasTranscript&&e.course.isUserAuthorizedForTranscript},e.getAuthorNames=function(e){var t=[];return angular.forEach(e,function(e){this.push(e.text)},t),t.join(", ")},e.getLongBio=function(e){return o.trustAsHtml(e.longBio)},e.rateCourse=function(t){r.rateCourse(e.course.name,t)},e.toggleCourseBookmark=function(t){e.bookmarkResult.failed=!1,e.bookmarkResult.errorMessage="",i.toggleBookmark(t).then(null,function(t){e.bookmarkResult.failed=!0,e.bookmarkResult.errorMessage=t})},e.addCourseToPlaylist=function(e){l.add(e.name),e.isInPlaylist=!0},e.removeCourseFromPlaylist=function(e){l["delete"](e.name),e.isInPlaylist=!1},e.navigateTo=function(t){s.search("id",null),s.path(t+"/"+e.course.name)}}]),pluralsightModule.filter("courseDuration",function(){return function(e){if(e){var t=e.split(":"),r=0==t[0]?"":parseInt(t[0])+"h ",n=parseInt(t[1])+"m";return r+n}return""}}),pluralsightModule.directive("courseListing",function(){return{"restrict":"A","replace":!0,"templateUrl":"/templates/course/_course-listing-template.html","controller":"CourseListingController","controllerAs":"courseListingController","scope":{"courses":"=","predicate":"=orderBy","selectedLevel":"=filterByLevel","arrowUpImageUrl":"@","arrowDownImageUrl":"@","itemClicked":"&?"}}}).controller("CourseListingController",["$scope","PlaylistRepository","PlayerService","baseUrls",function(e,t,r,n){var o=this;o.movePlaylistItemUp=function(r){o.movePlaylistItemFailed=!1;var n=null;r.sequence>1&&(n=_.find(e.courses,function(e){return e.sequence===r.sequence-1}),n.sequence++),r.sequence--,t.move(r.name,r.sequence).$promise.then(function(){},function(){o.movePlaylistItemFailed=!0,n&&n.sequence--,r.sequence++})},o.movePlaylistItemDown=function(r){o.movePlaylistItemFailed=!1;var n=null;r.sequence<e.courses.length&&(n=_.find(e.courses,function(e){return e.sequence===r.sequence+1}),n.sequence--),r.sequence++,t.move(r.name,r.sequence).$promise.then(function(){},function(){o.movePlaylistItemFailed=!0,n&&n.sequence++,r.sequence--})},o.deletePlaylistItem=function(r){o.deletePlaylistItemFailed=!1;var n=_.find(e.courses,function(e){return e.name==r});e.courses=_.without(e.courses,n);var s=_.filter(e.courses,function(e){return e.sequence>n.sequence});angular.forEach(s,function(e){e.sequence--}),t["delete"](r).$promise.then(function(){},function(){o.deletePlaylistItemFailed=!0,e.courses.push(n)})},o.openPlayer=function(e){r.openPlayerUrl(n.mainWebUrl+"/"+e)},o.itemClicked=function(t){e.itemClicked&&e.itemClicked({"index":t})}}]),pluralsightModule.directive("courseProgressBar",function(){return{"restrict":"E","templateUrl":"/templates/course/course-progress-bar.html","controller":"CourseProgressBarController","controllerAs":"courseProgressBarController","replace":!0,"scope":{"courseModules":"=","showCourseCompleteCheckmark":"@?"}}}).controller("CourseProgressBarController",["$scope","clipDurationInSecondsFilter","numberFilter",function(e,t,r){function n(){var n=_.flatten(_.map(e.courseModules,function(e){return e.clips})),s=0,a=0;angular.forEach(n,function(e){s+=e.hasBeenViewed?t(e.duration):0,a+=t(e.duration)}),o.viewedPercent=r(s/a*100,0)+"%",o.unviewedPercent=r(100-s/a*100,0)+"%"}var o=this;n(),e.$watchCollection("courseModules",n),o.showCourseCompletedCheckmark=function(){return e.showCourseCompleteCheckmark&&"100%"==o.viewedPercent}}]),pluralsightModule.service("CourseRepository",["$resource","$http","$q","tagUrlFilter","baseUrls",function(e,t,r,n,o){return{"getPopular":function(){return e(o.dataUrl+"/courses/popularmin",{},{"getArray":{"method":"GET","isArray":!0}}).getArray()},"getAllPopularCourses":function(){return e(o.dataUrl+"/courses/popular",{},{"getArray":{"method":"GET","isArray":!0,"withCredentials":!0}}).getArray()},"getNewReleases":function(){return e(o.dataUrl+"/courses/newmin",{},{"getArray":{"method":"GET","isArray":!0}}).getArray()},"getAllNewReleases":function(){return e(o.dataUrl+"/courses/new",{},{"getArray":{"method":"GET","isArray":!0,"withCredentials":!0}}).getArray()},"get":function(t){return e(o.dataUrl+"/course/"+t,{},{"get":{"method":"GET","withCredentials":!0}}).get({},function(e){e.loaded=!0})},"getCourseContent":function(t){return e(o.dataUrl+"/course/content/"+t,{},{"getArray":{"method":"GET","isArray":!0,"withCredentials":!0}}).getArray()},"getCourseAuthors":function(t){return e(o.dataUrl+"/course/authors/"+t,{},{"getArray":{"method":"GET","isArray":!0}}).getArray()},"getCourseRelationships":function(t){return e(o.dataUrl+"/course/relationships/"+t,{},{"getArray":{"method":"GET","isArray":!0}}).get()},"rateCourse":function(t,r){return e(o.dataUrl+"/course/ratecourse/"+t+"/"+r,{},{"save":{"method":"POST","withCredentials":!0}}).save()},"getCourseTranscript":function(t,r){return e(o.dataUrl+"/course/transcript/"+t+"/"+r,{},{"get":{"method":"GET","withCredentials":!0}}).get({},function(e){e.loaded=!0})},"getExerciseFilesInfo":function(t){return e(o.dataUrl+"/course/exercisefiles/"+t,{},{"get":{"method":"GET","withCredentials":!0}}).get({},function(e){e.loaded=!0})},"getAssessmentInfo":function(t){return e(o.dataUrl+"/course/assessment/"+t,{},{"get":{"method":"GET","withCredentials":!0}}).get({},function(e){e.loaded=!0})},"getCoursesByTags":function(t,r,s,a,i){return e(o.dataUrl+"/courses/tags?id="+n(t.join(","))+"&page="+r+"&pageSize="+s+"&sort="+a+"&level="+i,{},{"get":{"method":"GET","withCredentials":!0}}).get()},"getExerciseFileUrl":function(t){return e(o.dataUrl+"/course/exercisefileredirector/"+t,{},{"get":{"method":"GET","withCredentials":!0}}).get()},"getSocialData":function(t){var r=e(o.dataUrl+"/course/social/"+t).get({},function(e){e.loaded=!0});return r},"getLivefyreScript":function(e){var n=r.defer();return t.get(o.dataUrl+"/course/livefyre/"+e,{"withCredentials":!0}).success(function(e){n.resolve(e)}),n.promise}}}]),pluralsightModule.controller("DescriptionController",["$scope","CourseRepository","$routeParams",function(e,t,r){e.courseAuthors=t.getCourseAuthors(r.courseName),e.clearTabs(),e.tabClasses.description="active",e.authorDetailsLink=function(e){return"/author/"+e.authorHandle
}}]),pluralsightModule.controller("DiscussionController",["$scope","CourseRepository","$routeParams","$sce",function(e,t,r,n){e.clearTabs(),e.tabClasses.discussion="active",t.getLivefyreScript(r.courseName).then(function(t){e.livefyreScript=n.trustAsHtml(t)})}]),pluralsightModule.controller("ExerciseFilesController",["$scope","CourseRepository","$routeParams","$window","baseUrls",function(e,t,r,n,o){e.exerciseFilesInfo=t.getExerciseFilesInfo(r.courseName),e.clearTabs(),e.tabClasses.exerciseFiles="active",e.upgradeUrl=function(){return o.mainWebUrl+"/Account/ChangeSubscription?userHandle="+e.exerciseFilesInfo.userHandle},e.subscribeUrl=function(){return"/signup"},e.downloadExerciseFiles=function(){t.getExerciseFileUrl(r.courseName).$promise.then(function(e){e&&(n.location=e.value)})}}]),pluralsightModule.directive("history",function(){return{"restrict":"E","templateUrl":"/templates/user/history.html","controller":"HistoryController","controllerAs":"historyController","replace":!0,"scope":{"beginnerLevelImage":"@","intermediateLevelImage":"@","advancedLevelImage":"@","pageSize":"@?","trackClicks":"@?"}}}).controller("HistoryController",["$scope","UserRepository","AuthorLinksService","PlayerService","baseUrls","GoogleDataLayerService",function(e,t,r,n,o,s){var a=this;a.maxPageSize=9999,e.historyPageSize=e.pageSize?e.pageSize:a.maxPageSize,t.getCourseHistory(100,!0).$promise.then(function(t){_.each(t,function(e){e.course.authorLinks=r.getAuthorLinks(e.course.authors,e.course.name)}),a.history=t,e.loading=!1}),e.loading=!0,a.openPlayer=function(e){n.openPlayerUrl(o.mainWebUrl+"/"+e)},a.trackClick=function(t){e.trackClicks&&s.pushDashboardClick("History",t+1)}}]),pluralsightModule.controller("NewReleasesController",["$scope","CourseRepository","AuthorLinksService",function(e,t,r){e.loading=!0,t.getAllNewReleases().$promise.then(function(t){angular.forEach(t,function(e){e.authorLinks=r.getAuthorLinks(e.authors,e.name)}),e.newCourses=t,e.loading=!1})}]),pluralsightModule.directive("newReleases",function(){return{"restrict":"E","templateUrl":"/templates/course/new-releases.html","controller":"NewReleasesElementController","controllerAs":"newReleasesController","replace":!0,"scope":{}}}).controller("NewReleasesElementController",["$scope","CourseRepository","baseUrls",function(e,t,r){this.newReleaseCourses=t.getNewReleases(),this.staticUrl=r.staticUrl}]),pluralsightModule.controller("PopularController",["$scope","CourseRepository","AuthorLinksService","UserRepository",function(e,t,r,n){e.loading=!0,t.getAllPopularCourses().$promise.then(function(t){angular.forEach(t,function(e){e.authorLinks=r.getAuthorLinks(e.authors,e.name)}),e.popularCourses=t,e.loading=!1,e.isAuthenticated()&&n.getUserCourseRatings().$promise.then(function(t){angular.forEach(e.popularCourses,function(e){t[e.name]&&(e.courseRating.rating=t[e.name],e.courseRating.hasUserRatedCourse=!0)})})})}]),pluralsightModule.directive("popularCourses",function(){return{"restrict":"E","templateUrl":"/templates/course/popular-courses.html","controller":"PopularCoursesElementController","controllerAs":"popularCoursesController","replace":!0,"scope":{}}}).controller("PopularCoursesElementController",["$scope","CourseRepository","baseUrls",function(e,t,r){this.popularCourses=t.getPopular(),this.staticUrl=r.staticUrl}]),pluralsightModule.filter("showRetired",function(){return function(e,t){return e?t?e:_.filter(e,function(e){return!e.isRetired}):[]}}),pluralsightModule.directive("social",["$http","$templateCache","$compile",function(e,t,r){function n(e){return e.socialData?e.socialData.loaded:!1}function o(t,n,o){e.get("/templates/course/_"+t+"-script.html").success(function(e){o.after(r(e)(n))})}return{"restrict":"A","scope":{"socialData":"=","showFacebook":"=","showTwitter":"=?","showGooglePlus":"=?","showLinkedIn":"=?"},"link":function(e,t,r){r.showFacebook||(e.showFacebook=!0),r.showTwitter||(e.showTwitter=!0),r.showGooglePlus||(e.showGooglePlus=!0),r.showLinkedIn||(e.showLinkedIn=!0),e.$watch(function(){return n(e)},function(r,n){n!=r&&e.socialData.loaded&&(o("facebook",e,t),o("twitter",e,t),o("google-plus",e,t),o("linked-in",e,t))})}}}]),pluralsightModule.controller("SocialLinksController",["$scope",function(e){function t(){e.showFacebook=!1,e.showTwitter=!1,e.showGooglePlus=!1,e.showLinkedIn=!1}e.toggleFacebook=function(){var r=e.showFacebook;t(),e.showFacebook=!r},e.toggleTwitter=function(){var r=e.showTwitter;t(),e.showTwitter=!r},e.toggleGooglePlus=function(){var r=e.showGooglePlus;t(),e.showGooglePlus=!r},e.toggleLinkedIn=function(){var r=e.showLinkedIn;t(),e.showLinkedIn=!r}}]),pluralsightModule.directive("starRating",function(){return{"restrict":"A","template":"<span ng-class=\"{'star-rating-small': !canRateCourse}\"></span>","replace":!0,"scope":{"rate":"&","score":"=","userRated":"=","canRateCourse":"="},"link":function(e,t){function r(t){e.rate({"newRating":t})}var n="//s.pluralsight.com/mn/img/sh/star-red-v2.png",o="//s.pluralsight.com/mn/img/sh/star-yellow-v1.png",s="//s.pluralsight.com/mn/img/sh/star-grey-v1.png",a="//s.pluralsight.com/mn/img/sh/star-half-yellow-v2.png";e.$watch("score",function(){var i=e.userRated?n:o;t.raty({"path":"","starOn":i,"starOff":s,"starHalf":a,"score":e.score,"readOnly":!e.canRateCourse,"hints":["Poor","Fair","Good","Very Good","Excellent"],"noRatedMsg":"Not enough viewers have rated this course","mouseover":function(){-1!=$("#courseRating").data().settings.starOn.indexOf("-yellow-")&&$("#courseRating").raty("set",{"starOn":n})},"click":function(e){$("#courseRating").parent().unbind("mouseleave"),r(e)}}),t.parent().bind("mouseleave",function(){e.userRated||$("#courseRating").raty("set",{"starOn":o,"score":$("#courseRating").raty("getScore")})})})}}}),pluralsightModule.directive("stopPropagation",function(){return{"restrict":"A","link":function(e,t){t.bind("click",function(e){e.stopPropagation()})}}}),pluralsightModule.controller("TableOfContentsController",["$scope","CourseRepository","$routeParams","$window","BookmarkService","UserRepository","PlayerService","baseUrls","$timeout",function(e,t,r,n,o,s,a,i,u){function l(e){return _.all(e,function(e){return e.userMayViewFirstClip})}function c(t,r,n){e.bookmarkResult.errorMessage="",e.bookmarkResult.failed=!1,o.toggleBookmark(t,r,n).then(null,function(t){e.bookmarkResult.errorMessage=t,e.bookmarkResult.failed=!0})}e.clearTabs(),e.tabClasses.tableOfContents="active",e.showDenialModal=!1,t.getCourseContent(r.courseName).$promise.then(function(t){e.courseModules=t,e.isAuthenticated()&&!l(t)&&(e.singleCourses=s.getSingleCourseSubscriptions())}),e.getEnabledClassIfAuthorized=function(e){return e?"":"disabled"},e.getBookmarkClass=function(e){return e.isBookmarked?"on":""},e.toggleModuleClipsVisibility=function(e){e.visible=!e.visible},e.expandAllModules=function(){_.each(e.courseModules,function(e){e.visible=!0})},e.collapseAllModules=function(){_.each(e.courseModules,function(e){e.visible=!1})},e.allModulesExpanded=function(){return _.every(e.courseModules,function(e){return e.visible})},e.toggleModuleBookmark=function(e,t){c(e,t)},e.toggleClipBookmark=function(e,t,r){c(e,t,r)},e.openPlayer=function(t,r){if(e.showDenialModal=!1,r){var n=i.mainWebUrl+"/player?"+t;a.openPlayerUrl(n)}else u(function(){e.showDenialModal=!0})}}]),pluralsightModule.controller("TranscriptController",["$scope","CourseRepository","$routeParams","TranslationRepository","UserRepository","baseUrls","PlayerService",function(e,t,r,n,o,s,a){e.clearTabs(),e.tabClasses.transcript="active",n.getTranslationLanguages().$promise.then(function(t){e.translationLanguages=t,e.selectedLanguage=e.getPreferredLanguage()}),o.getPreferredLanguage().$promise.then(function(n){e.preferredLanguageCode=n.code,e.selectedLanguage=e.getPreferredLanguage(),e.transcripts=t.getCourseTranscript(r.courseName,n.code)}),e.getPlayerUrl=function(e,t){return t?s.mainWebUrl+"/player?"+e+"&start="+t:s.mainWebUrl+"/player?"+e},e.openPlayer=function(e){var t=s.mainWebUrl+"/player?"+e;a.openPlayerUrl(t)},e.getPreferredLanguage=function(){return e.translationLanguages&&0!=e.translationLanguages.length&&e.preferredLanguageCode?_.findWhere(e.translationLanguages,{"code":e.preferredLanguageCode}):""},e.showLanguageOptions=function(){return e.isAuthenticated()&&e.preferredLanguageCode&&e.translationLanguages&&e.translationLanguages.length>0},e.retrieveTranscripts=function(n){e.preferredLanguageCode=n,e.transcripts=t.getCourseTranscript(r.courseName,n),o.setPreferredLanguage(n)}}]),pluralsightModule.directive("transcripts",["baseUrls",function(e){return{"restrict":"A","scope":{"clip":"="},"compile":function(){return function(t,r){for(var n=0;n<t.clip.transcripts.length;n++){var o='<a class="clipTranscript" href="javascript:openPlayerFromTranscript(\''+t.clip.playerParameters+"', "+t.clip.transcripts[n].displayTime+",'"+e.mainWebUrl+"')\">"+t.clip.transcripts[n].text+" </a>";r.append(o)}}}}}]),pluralsightModule.service("TranslationRepository",["$resource","baseUrls",function(e,t){return{"getTranslationLanguages":function(){return e(t.dataUrl+"/translation/languages").query()}}}]),pluralsightModule.controller("NewsletterController",["$scope","$location",function(e,t){e.showNewsletter=t.search().subscribed}]),pluralsightModule.controller("TagCloudController",["$scope","TagRepository",function(e,t){t.getPopularTags().then(function(t){e.tags=t.tagsForCurrentPage})}]),pluralsightModule.controller("InvoicesController",["$scope","InvoicesRepository",function(e,t){t.get().$promise.then(function(t){e.invoices=t})}]),pluralsightModule.service("InvoicesRepository",["$resource","baseUrls",function(e,t){return{"get":function(){return e(t.dataUrl+"/invoices",{},{"getArray":{"method":"GET","isArray":!0,"withCredentials":!0}}).getArray()}}}]),pluralsightModule.controller("KidsController",["$scope",function(e){e.user={}}]),$(document).foundation(),$(document).on("click","#expandAll",function(e){e.preventDefault(),$("[data-section] section").addClass("active")}),pluralsightModule.factory("Base64Service",function(){var e={"_keyStr":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=","encode":function(t){var r,n,o,s,a,i,u,l="",c=0;for(t=e._utf8_encode(t);c<t.length;)r=t.charCodeAt(c++),n=t.charCodeAt(c++),o=t.charCodeAt(c++),s=r>>2,a=(3&r)<<4|n>>4,i=(15&n)<<2|o>>6,u=63&o,isNaN(n)?i=u=64:isNaN(o)&&(u=64),l=l+this._keyStr.charAt(s)+this._keyStr.charAt(a)+this._keyStr.charAt(i)+this._keyStr.charAt(u);return l},"decode":function(t){var r,n,o,s,a,i,u,l="",c=0;for(t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");c<t.length;)s=this._keyStr.indexOf(t.charAt(c++)),a=this._keyStr.indexOf(t.charAt(c++)),i=this._keyStr.indexOf(t.charAt(c++)),u=this._keyStr.indexOf(t.charAt(c++)),r=s<<2|a>>4,n=(15&a)<<4|i>>2,o=(3&i)<<6|u,l+=String.fromCharCode(r),64!=i&&(l+=String.fromCharCode(n)),64!=u&&(l+=String.fromCharCode(o));return l=e._utf8_decode(l)},"_utf8_encode":function(e){e=e.replace(/\r\n/g,"\n");for(var t="",r=0;r<e.length;r++){var n=e.charCodeAt(r);128>n?t+=String.fromCharCode(n):n>127&&2048>n?(t+=String.fromCharCode(n>>6|192),t+=String.fromCharCode(63&n|128)):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128),t+=String.fromCharCode(63&n|128))}return t},"_utf8_decode":function(e){var t,r,n,o="",s=0;for(t=r=n=0;s<e.length;)t=e.charCodeAt(s),128>t?(o+=String.fromCharCode(t),s++):t>191&&224>t?(n=e.charCodeAt(s+1),o+=String.fromCharCode((31&t)<<6|63&n),s+=2):(n=e.charCodeAt(s+1),c3=e.charCodeAt(s+2),o+=String.fromCharCode((15&t)<<12|(63&n)<<6|63&c3),s+=3);return o}};return e}),pluralsightModule.directive("clickOnce",["$timeout",function(e){return{"restrict":"A","link":function(t,r){r.bind("click",function(){e(function(){r.attr("disabled",!0)},0)})}}}]),pluralsightModule.controller("CsAnnouncementController",["$scope","$timeout","ipCookie",function(e,t,r){t(function(){r("csAnnouncmentShown")||(e.showDialog=!0,r("csAnnouncmentShown",!0))}),e.showCsHeader=!r("hideCsAnnouncementHeader"),e.closeCsHeader=function(){e.showCsHeader=!1,r("hideCsAnnouncementHeader",!0)}}]),pluralsightModule.controller("FooterController",["$scope","SocialRepository","GoogleDataLayerService",function(e,t,r){e.social=t.getSocialCounts(),e.newsletterEmailFocus=function(){r.pushVpv({"substep":"form_start"},!0)}}]),pluralsightModule.factory("GoogleDataLayerService",function(){function e(e){window.dataLayer=window.dataLayer||[],window.dataLayer.push(e)}return{"pushVpv":function(t,r){var n={"vpvAttributes":t};r&&(n.event="vpvEvent"),e(n)},"push":function(t){e(t)},"pushTagDisplayCustomization":function(t,r){e({"event":"gaEvent","gaEventCategory":"Tag Display Customization","gaEventAction":t,"gaEventLabel":r})},"pushBrowseTagsDisplayCustomization":function(t,r){e({"event":"gaEvent","gaEventCategory":"Browse Tags Display Customization","gaEventAction":t,"gaEventLabel":r})},"pushDashboardClick":function(t,r){e({"event":"gaEvent","gaEventCategory":"Dashboard","gaEventAction":t,"gaEventLabel":r.toString()})}}}),pluralsightModule.directive("gravatar",["gravatarUrlBuilder",function(e){return{"restrict":"A","template":"<img />","replace":!0,"link":function(t,r,n){r.addClass("rounded-corners"),n.$observe("email",function(t,r){t!==r&&n.$set("src",e.buildGravatarUrl(t,n.size))}),n.$observe("size",function(e,t){e!==t&&(r.attr("width",n.size),r.attr("height",n.size))})}}}]),pluralsightModule.factory("gravatarUrlBuilder",["baseUrls",function(e){return{"buildGravatarUrl":function(t,r){var n="https:"+e.staticUrl+"/content/img/layout/gravatar-default-v4.png",o=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;if(!o.test(t))return n;var s=function(e){function t(e,t){return e<<t|e>>>32-t}function r(e,t){var r,n,o,s,a;return o=2147483648&e,s=2147483648&t,r=1073741824&e,n=1073741824&t,a=(1073741823&e)+(1073741823&t),r&n?2147483648^a^o^s:r|n?1073741824&a?3221225472^a^o^s:1073741824^a^o^s:a^o^s}function n(e,t,r){return e&t|~e&r}function o(e,t,r){return e&r|t&~r}function s(e,t,r){return e^t^r}function a(e,t,r){return t^(e|~r)}function i(e,o,s,a,i,u,l){return e=r(e,r(r(n(o,s,a),i),l)),r(t(e,u),o)}function u(e,n,s,a,i,u,l){return e=r(e,r(r(o(n,s,a),i),l)),r(t(e,u),n)}function l(e,n,o,a,i,u,l){return e=r(e,r(r(s(n,o,a),i),l)),r(t(e,u),n)}function c(e,n,o,s,i,u,l){return e=r(e,r(r(a(n,o,s),i),l)),r(t(e,u),n)}function d(e){for(var t,r=e.length,n=r+8,o=(n-n%64)/64,s=16*(o+1),a=Array(s-1),i=0,u=0;r>u;)t=(u-u%4)/4,i=u%4*8,a[t]=a[t]|e.charCodeAt(u)<<i,u++;return t=(u-u%4)/4,i=u%4*8,a[t]=a[t]|128<<i,a[s-2]=r<<3,a[s-1]=r>>>29,a}function p(e){var t,r,n="",o="";for(r=0;3>=r;r++)t=e>>>8*r&255,o="0"+t.toString(16),n+=o.substr(o.length-2,2);return n}function g(e){e=e.replace(/rn/g,"n");for(var t="",r=0;r<e.length;r++){var n=e.charCodeAt(r);128>n?t+=String.fromCharCode(n):n>127&&2048>n?(t+=String.fromCharCode(n>>6|192),t+=String.fromCharCode(63&n|128)):(t+=String.fromCharCode(n>>12|224),t+=String.fromCharCode(n>>6&63|128),t+=String.fromCharCode(63&n|128))}return t}var f,m,h,v,y,C,w,b,A,S=Array(),k=7,$=12,U=17,P=22,M=5,T=9,R=14,I=20,E=4,L=11,N=16,D=23,F=6,q=10,B=15,O=21;for(e=g(e),S=d(e),C=1732584193,w=4023233417,b=2562383102,A=271733878,f=0;f<S.length;f+=16)m=C,h=w,v=b,y=A,C=i(C,w,b,A,S[f+0],k,3614090360),A=i(A,C,w,b,S[f+1],$,3905402710),b=i(b,A,C,w,S[f+2],U,606105819),w=i(w,b,A,C,S[f+3],P,3250441966),C=i(C,w,b,A,S[f+4],k,4118548399),A=i(A,C,w,b,S[f+5],$,1200080426),b=i(b,A,C,w,S[f+6],U,2821735955),w=i(w,b,A,C,S[f+7],P,4249261313),C=i(C,w,b,A,S[f+8],k,1770035416),A=i(A,C,w,b,S[f+9],$,2336552879),b=i(b,A,C,w,S[f+10],U,4294925233),w=i(w,b,A,C,S[f+11],P,2304563134),C=i(C,w,b,A,S[f+12],k,1804603682),A=i(A,C,w,b,S[f+13],$,4254626195),b=i(b,A,C,w,S[f+14],U,2792965006),w=i(w,b,A,C,S[f+15],P,1236535329),C=u(C,w,b,A,S[f+1],M,4129170786),A=u(A,C,w,b,S[f+6],T,3225465664),b=u(b,A,C,w,S[f+11],R,643717713),w=u(w,b,A,C,S[f+0],I,3921069994),C=u(C,w,b,A,S[f+5],M,3593408605),A=u(A,C,w,b,S[f+10],T,38016083),b=u(b,A,C,w,S[f+15],R,3634488961),w=u(w,b,A,C,S[f+4],I,3889429448),C=u(C,w,b,A,S[f+9],M,568446438),A=u(A,C,w,b,S[f+14],T,3275163606),b=u(b,A,C,w,S[f+3],R,4107603335),w=u(w,b,A,C,S[f+8],I,1163531501),C=u(C,w,b,A,S[f+13],M,2850285829),A=u(A,C,w,b,S[f+2],T,4243563512),b=u(b,A,C,w,S[f+7],R,1735328473),w=u(w,b,A,C,S[f+12],I,2368359562),C=l(C,w,b,A,S[f+5],E,4294588738),A=l(A,C,w,b,S[f+8],L,2272392833),b=l(b,A,C,w,S[f+11],N,1839030562),w=l(w,b,A,C,S[f+14],D,4259657740),C=l(C,w,b,A,S[f+1],E,2763975236),A=l(A,C,w,b,S[f+4],L,1272893353),b=l(b,A,C,w,S[f+7],N,4139469664),w=l(w,b,A,C,S[f+10],D,3200236656),C=l(C,w,b,A,S[f+13],E,681279174),A=l(A,C,w,b,S[f+0],L,3936430074),b=l(b,A,C,w,S[f+3],N,3572445317),w=l(w,b,A,C,S[f+6],D,76029189),C=l(C,w,b,A,S[f+9],E,3654602809),A=l(A,C,w,b,S[f+12],L,3873151461),b=l(b,A,C,w,S[f+15],N,530742520),w=l(w,b,A,C,S[f+2],D,3299628645),C=c(C,w,b,A,S[f+0],F,4096336452),A=c(A,C,w,b,S[f+7],q,1126891415),b=c(b,A,C,w,S[f+14],B,2878612391),w=c(w,b,A,C,S[f+5],O,4237533241),C=c(C,w,b,A,S[f+12],F,1700485571),A=c(A,C,w,b,S[f+3],q,2399980690),b=c(b,A,C,w,S[f+10],B,4293915773),w=c(w,b,A,C,S[f+1],O,2240044497),C=c(C,w,b,A,S[f+8],F,1873313359),A=c(A,C,w,b,S[f+15],q,4264355552),b=c(b,A,C,w,S[f+6],B,2734768916),w=c(w,b,A,C,S[f+13],O,1309151649),C=c(C,w,b,A,S[f+4],F,4149444226),A=c(A,C,w,b,S[f+11],q,3174756917),b=c(b,A,C,w,S[f+2],B,718787259),w=c(w,b,A,C,S[f+9],O,3951481745),C=r(C,m),w=r(w,h),b=r(b,v),A=r(A,y);var x=p(C)+p(w)+p(b)+p(A);return x.toLowerCase()};return"https://secure.gravatar.com/avatar/"+s(t.toLowerCase())+".jpg?s="+r+"&r=g&d="+encodeURI(n)}}}]),pluralsightModule.controller("HeaderController",["$scope","$timeout","UserRepository","CourseRepository","TagRepository","PlayerService","ipCookie","$window",function(e,t,r,n,o,s){e.popularCourses=n.getPopular(),e.newReleaseCourses=n.getNewReleases(),e.topTags=o.getTopTags(),e.courseHistory=r.getCourseHistory(),e.viewCourse=function(e){s.openPlayerUrl(e)}}]),pluralsightModule.directive("menuButton",function(){return{"restrict":"C","link":function(e,t){t.click(function(){$(".hidden-nav").slideToggle()})}}}),pluralsightModule.controller("MessageBarController",["$scope","ipCookie","Base64Service","baseUrls",function(e,t,r,n){var o=null;e.hasMessage=function(){return t("status")||o},e.getMessage=function(){if(null===o){var e=t("status");e&&(o=r.decode(e))}return o},e.clearMessage=function(){var e=n.staticUrl.replace("//","").split(".").slice(-2).join(".");t("status","",{"path":"/","domain":e,"expires":-1}),o=null}}]),pluralsightModule.factory("OptimizelyService",function(){return{"pushEvent":function(e){window.optimizely=window.optimizely||[],window.optimizely.push(["trackEvent",e])}}}),pluralsightModule.directive("passwordMatches",function(){return{"require":"ngModel","restrict":"A","scope":{"otherPasswordFieldValue":"=passwordMatches"},"link":function(e,t,r,n){function o(t){return t===e.otherPasswordFieldValue}function s(e){var t=o(e);return n.$setValidity("password-matches",t),t?e:void 0}n.$parsers.unshift(function(e){s(e)}),n.$formatters.unshift(function(e){s(e)}),e.$watch(function(){return e.otherPasswordFieldValue},function(){var e=o(n.$viewValue);n.$setValidity("password-matches",e)})}}}),pluralsightModule.service("SocialRepository",["$resource","baseUrls",function(e,t){return{"getSocialCounts":function(){var r=e(t.dataUrl+"/social").get();return r}}}]),pluralsightModule.directive("subNavigation",function(){return{"restrict":"C","link":function(e,t){$(".menu > li",t).click(function(e){$(this).siblings().find("ul").removeClass("expanded"),$(this).find("ul").toggleClass("expanded"),e.stopPropagation()}),$(".menu > li ul",t).removeClass("expanded")}}}),pluralsightModule.service("UserRepository",["$resource","baseUrls",function(e,t){return{"getBasicInfo":function(r){var n=e(t.dataUrl+"/user/basicinfo",{},{"get":{"method":"GET","withCredentials":!0}}).get(function(e){e.loaded=!0,r(e)});return n},"getCourseHistory":function(r,n){var o="/user/history";r&&(o=o+"/"+r),n&&(o+="?includeCourseProgress="+n);var s=e(t.dataUrl+o,{},{"getArray":{"method":"GET","withCredentials":!0,"isArray":!0}}).getArray({},function(e){e.loaded=!0});return s},"getUserCourseRatings":function(){return e(t.dataUrl+"/user/courserating",{},{"get":{"method":"GET","withCredentials":!0}}).get()},"signOut":function(r){return e(t.dataUrl+"/user/signout",{"returnUrl":r},{"save":{"method":"POST","withCredentials":!0}}).save()},"getPreferredLanguage":function(){return e(t.dataUrl+"/user/preferredlanguage",{},{"get":{"method":"GET","withCredentials":!0}}).get()},"setPreferredLanguage":function(r){e(t.dataUrl+"/user/preferredlanguage/"+r,{},{"save":{"method":"POST","withCredentials":!0}}).save()},"getAccountInfo":function(){return e(t.dataUrl+"/user/account",{},{"get":{"method":"GET","withCredentials":!0}}).get({},function(e){e.loaded=!0})},"getChangeSubscriptionInfo":function(){return e(t.dataUrl+"/user/changesubscription",{},{"get":{"method":"GET","withCredentials":!0}}).get()},"getConfirmSubscriptionChangeInfo":function(r){return e(t.dataUrl+"/user/confirmsubscriptionchange/"+r,{},{"get":{"method":"GET","withCredentials":!0}}).get()},"confirmChangeSubscription":function(r){return e(t.dataUrl+"/user/confirmsubscriptionchange",{},{"save":{"method":"POST","withCredentials":!0}}).save({"sku":r})},"toggleAutoRenew":function(){return e(t.dataUrl+"/user/toggleautorenew",{},{"toggle":{"method":"POST","withCredentials":!0}}).toggle()},"updatePassword":function(r,n){return e(t.dataUrl+"/user/updatepassword",{},{"save":{"method":"PUT","withCredentials":!0,"responseType":"json"}}).save({"old":r,"new":n})},"getSingleCourseSubscriptions":function(){return e(t.dataUrl+"/user/subscription",{},{"get":{"method":"GET","withCredentials":!0}}).get()}}}]),pluralsightModule.controller("ValidationController",["$scope","validationService",function(e,t){e.labelClass=function(t,r){return e[t][r].$invalid&&e[t][r].$dirty?"error":""},e.emailAddressPattern=t.emailAddressPattern}]),pluralsightModule.directive("validation",["$compile",function(e){return{"require":"ngModel","restrict":"A","link":function(t,r,n){if(r[0].form){var o=r[0].form.name;if(n.required){var s=angular.element('<small ng-show="'+o+"['"+n.name+"'].$error.required && "+o+"['"+n.name+"'].$dirty\">"+n.validation+" is required</small>");r.after(e(s)(t))}if(n.ngPattern){var a=n.patternMessage?n.patternMessage:"Invalid "+n.validation,i=angular.element('<small ng-show="'+o+"['"+n.name+"'].$error.pattern && "+o+"['"+n.name+"'].$dirty\">"+a+"</small>");r.after(e(i)(t))}if(n.ngMinlength){var u=angular.element('<small ng-show="'+o+"['"+n.name+"'].$error.minlength\">"+n.validation+" must be at least "+n.ngMinLength+" characters</small>");r.after(e(u)(t))}if(n.ngMaxlength){var l=angular.element('<small ng-show="'+o+"['"+n.name+"'].$error.maxlength\">"+n.validation+" must be no more than "+n.ngMaxlength+" characters</small>");r.after(e(l)(t))}if(n.passwordMatches){var c=angular.element('<small ng-show="'+o+"['"+n.name+"'].$error['password-matches'] && "+o+"['"+n.name+"'].$dirty \">Passwords must match</small>");r.after(e(c)(t))}}}}}]),pluralsightModule.directive("value",["$parse",function(e){return{"restrict":"A","link":function(t,r,n){("radio"!==n.type||n.checked)&&n.ngModel&&e(n.ngModel).assign(t,n.value)}}}]),pluralsightModule.controller("MarketoFormController",["$scope","MarketoRepository",function(e,t){e.submitContactUsForm=function(r){t.save(r),e.contactSubmitted=!0}}]),pluralsightModule.service("MarketoRepository",["$resource","baseUrls",function(e,t){return{"save":function(r){return e(t.dataUrl+"/marketo/postcontact",{},{"save":{"method":"POST","withCredentials":!0}}).save(r)}}}]),pluralsightModule.factory("PlayerService",["$window","baseUrls",function(e,t){function r(e,r,n,o){return t.mainWebUrl+"/player?author="+e+"&name="+r+"&clip="+n+"&course="+o}var n="width=1354,height=836,status=0,titlebar=0,scrollbars=0,menubar=0,toolbar=0,location=0,resizable=1";return{"openPlayerUrl":function(t){e.open(t,"psplayer",n)},"openPlayer":function(t,o,s,a){var i=r(t,o,s,a);e.open(i,"psplayer",n)}}}]),pluralsightModule.controller("ChangeEmailController",["$scope","$routeParams","$route","ProfileRepository","baseUrls","$window",function(e,t,r,n){e.loading=!0,e.$on("$routeChangeSuccess",function(){if(t.token){var r=t.token;e.token=r,n.validateChangeEmailToken(r).$promise.then(function(t){e.tokenValidationResult=t,e.loading=!1})}else e.tokenValidationResult={"loaded":!0,"valid":!1},e.loading=!1}),e.confirmUpdateEmail=function(t){n.completeEmailChange(e.token,t).$promise.then(function(t){"Success"==t.result?(e.errorMessage="",e.emailUpdateSuccess=!0):e.errorMessage="InvalidPassword"==t.result?"Password is invalid, please provide a valid password.":"An error occurred while trying to update your email.  Please try again."})},e.showPasswordErrorMessage=function(){return e.errorMessage&&e.errorMessage.length>0},e.passwordLabelClass=function(){return e.showPasswordErrorMessage()?"error":""}}]),pluralsightModule.controller("EditProfileController",["$scope","ProfileRepository","baseUrls","$window",function(e,t,r,n){t.get().$promise.then(function(t){return t.isProxyAccount?void(n.location.href=r.staticUrl+"/account"):(e.profile=t.basicInfo,e.originalEmailAddress=t.eMailInfo.email,e.newEmailAddress=t.eMailInfo.email,e.newUserName=t.userNameVm.userName,e.originalUserName=t.userNameVm.userName,void(e.userName=t.userNameVm.userName))}),e.saveProfile=function(r,n){e.failedToSaveProfile=!1,t.save(r).$promise.then(function(){n.$setPristine(!0),e.profileSavedSuccessfully=!0},function(){e.profileSavedSuccessfully=!1,e.failedToSaveProfile=!0})},e.updateUserName=function(r,n){e.userNameSaveComplete=!1,t.saveUserName(r).$promise.then(function(t){n.$setPristine(!0),e.userNameFailureMessage=t.errorMessage,e.userNameSaveComplete=!0,t.succeeded&&(e.userName=r,e.originalUserName=r)},function(){e.userNameFailureMessage="We were unable to update your user name"})},e.updateEmail=function(r,n){e.emailSaveComplete=!1,t.saveEmail(r).$promise.then(function(t){n.$setPristine(!0),e.emailFailureMessage=t.errorMessage,e.emailSaveComplete=!0},function(){e.emailFailureMessage="We were unable to update your email address"})},e.updateProfileVisibility=function(t){t.succeeded?(e.profile.showMakePublic=t.showMakePublic,e.profile.showMakeInternal=t.showMakeInternal,e.profile.showMakePrivate=t.showMakePrivate,e.profile.friendlyVisibilityDescription=t.description,e.visibilityFailureMessage=""):e.visibilityFailureMessage=t.errorMessage},e.makeProfilePublic=function(){t.makePublic().$promise.then(function(t){e.updateProfileVisibility(t)},function(){e.visibilityFailureMessage="Something unexpected happened while trying to update your profile visibility"})},e.makeProfileInternal=function(){t.makeInternal().$promise.then(function(t){e.updateProfileVisibility(t)},function(){e.visibilityFailureMessage="Something unexpected happened while trying to update your profile visibility"})},e.makeProfilePrivate=function(){t.makePrivate().$promise.then(function(t){e.updateProfileVisibility(t)},function(){e.visibilityFailureMessage="Something unexpected happened while trying to update your profile visibility"})},e.emailUpdateSuccess=function(t){return t.$pristine&&!e.emailFailureMessage&&e.emailSaveComplete},e.userNameUpdateSuccess=function(t){return t.$pristine&&!e.userNameFailureMessage&&e.userNameSaveComplete},e.updateEmailDisabled=function(t,r){return t.$invalid||r==e.originalEmailAddress},e.updateUserNameDisabled=function(t,r){return t.$invalid||r==e.originalUserName}}]),pluralsightModule.controller("ProfileController",["$scope","$routeParams","$route","ProfileRepository","$location",function(e,t,r,n,o){var s=!0;e.$on("$routeChangeSuccess",function(){e.vanityReload||(e.vanityReload=!1,e.loading=!0,e.userName=t.userName?t.userName:"",n.get(e.userName).$promise.then(function(t){e.userName.toLowerCase()!=t.basicInfo.userName.toLowerCase()&&(e.vanityReload=!0,o.path(t.basicInfo.userName.toLowerCase())),e.profileData=t,e.loading=!1},function(){s=!1}))}),e.showProfile=function(){return s}}]),pluralsightModule.service("ProfileRepository",["$resource","baseUrls",function(e,t){return{"get":function(r){return r=r?r:"",e(t.dataUrl+"/profile/"+r,{},{"get":{"method":"GET","withCredentials":!0}}).get({},function(e){e.loaded=!0})},"save":function(r){return e(t.dataUrl+"/profile/save",{},{"save":{"method":"PUT","withCredentials":!0}}).save(r)},"saveEmail":function(r){return e(t.dataUrl+"/user/email",{},{"save":{"method":"PUT","withCredentials":!0}}).save({"email":r})},"saveUserName":function(r){return e(t.dataUrl+"/user/username",{},{"save":{"method":"PUT","withCredentials":!0}}).save({"userName":r})},"makePublic":function(){return e(t.dataUrl+"/user/visibility",{},{"save":{"method":"PUT","withCredentials":!0}}).save({"visibility":"public"})},"makeInternal":function(){return e(t.dataUrl+"/user/visibility",{},{"save":{"method":"PUT","withCredentials":!0}}).save({"visibility":"internal"})},"makePrivate":function(){return e(t.dataUrl+"/user/visibility",{},{"save":{"method":"PUT","withCredentials":!0}}).save({"visibility":"private"})},"validateChangeEmailToken":function(r){return e(t.dataUrl+"/user/validatechangeemailtoken/"+r,{},{"get":{"method":"GET","withCredentials":!0}}).get({},function(e){e.loaded=!0})},"completeEmailChange":function(r,n){return e(t.dataUrl+"/user/finishchangeemail/",{},{"save":{"method":"PUT","withCredentials":!0,"responseType":"json"}}).save({"token":r,"password":n})}}}]),pluralsightModule.directive("playlist",function(){return{"restrict":"E","templateUrl":"/templates/user/playlist.html","controller":"PlaylistController","controllerAs":"playlistController","arrowUpImageUrl":"@","arrowDownImageUrl":"@","replace":!0}}).controller("PlaylistController",["$scope","PlaylistRepository","AuthorLinksService","GoogleDataLayerService",function(e,t,r,n){var o=this;e.loading=!0,t.get().$promise.then(function(t){angular.forEach(t,function(e){e.authorLinks=r.getAuthorLinks(e.authors,e.name)}),o.playlistItems=t,e.loading=!1},function(){e.loading=!1}),o.trackClick=function(e){n.pushDashboardClick("Playlist",e+1)}}]),pluralsightModule.service("PlaylistRepository",["$resource","baseUrls",function(e,t){return{"get":function(){return e(t.dataUrl+"/user/playlist",{},{"getArray":{"method":"GET","withCredentials":!0,"isArray":!0}}).getArray({},function(e){e.loaded=!0})},"add":function(r){return e(t.dataUrl+"/user/playlist",{},{"save":{"method":"POST","withCredentials":!0}}).save({"courseName":r})},"delete":function(r){return e(t.dataUrl+"/user/playlist/:courseName",{},{"delete":{"method":"DELETE","withCredentials":!0}})["delete"]({"courseName":r})},"move":function(r,n){return e(t.dataUrl+"/user/reorderplaylist",{},{"save":{"method":"POST","withCredentials":!0}}).save({"courseName":r,"newPosition":n})}}}]),pluralsightModule.directive("dialog",function(){return{"restrict":"A","template":'<div ng-transclude class="reveal-modal"></div>',"replace":!0,"transclude":!0,"link":function(e,t,r){var n=!1;e.$watch(r.show,function(e,r){r!=e&&(e?($(t).foundation("reveal","open"),n=!0):n&&$(t).foundation("reveal","close"))})}}}),pluralsightModule.directive("focus",function(){return{"restrict":"A","link":function(e,t){t[0].focus()}}}),pluralsightModule.directive("inputDelayedAction",["$timeout",function(e){var t;return{"restrict":"A","link":function(r,n,o){r.$watch(function(){return n.val()},function(n,s){n!=s&&""!=o.inputDelayedAction&&(e.cancel(t),t=e(function(){r.$apply(o.inputDelayedAction)},400))})}}}]),pluralsightModule.directive("loading",function(){return{"restrict":"A","replace":!0,"scope":{"show":"="},"template":'<div class="panel"><h4>Loading...</h4></div>',"link":function(e,t){e.$watch("show",function(e){e?$(t).show():$(t).hide()})}}}),pluralsightModule.service("NationalEntitiesRepository",["$resource","$http","$q","baseUrls",function(e,t,r,n){return{"get":function(){return e(n.dataUrl+"/nationalentities",{},{"getArray":{"method":"GET","isArray":!0}}).getArray()}}}]),pluralsightModule.directive("redirectToSignIn",["$window","baseUrls",function(e,t){return{"restrict":"A","link":function(r){r.user.$promise.then(function(){r.isAuthenticated()||(e.location.href=t.mvcUrl+"/signin?returnUrl="+e.location.href)
})}}}]),pluralsightModule.directive("ngEnter",function(){return function(e,t,r){t.bind("keydown keypress",function(t){13===t.which&&(e.$apply(function(){e.$eval(r.ngEnter)}),t.preventDefault())})}}),pluralsightModule.filter("truncateWithEllipsis",function(){return function(e,t){return e.length>t?e.substr(0,t-3)+"...":e}}),pluralsightModule.filter("decimalOnly",function(){return function(e){if(!e)return"";var t=e.toString().split(".");if(t.length<2)return"00";var r=t[1];return 1===r.length?r+"0":r}}),pluralsightModule.service("IndividualPricingRepository",["$resource","baseUrls","$q",function(e,t){return{"getPricing":function(r){return e(t.dataUrl+"/pricing/individual/"+r,{},{"get":{"method":"GET","withCredentials":!0}}).get({})}}}]),pluralsightModule.directive("myPricing",[function(){return{"scope":{"data":"=","showMonthly":"="},"controller":["$scope",function(e){e.showAnnualDiscount=function(){return e.data&&e.data.annualPricing!=e.data.discountedAnnualPricing},e.showMonthlyDiscount=function(){return e.data&&e.data.monthlyPricing!=e.data.discountedMonthlyPricing},e.annualDiscountClass=function(){return e.showAnnualDiscount()?"discount-pricing":"no-discount"},e.monthlyDiscountClass=function(){return e.showMonthlyDiscount()?"discount-pricing":"no-discount"}}],"template":'<small><strong ng-class="annualDiscountClass()">${{data.annualPricing}}</strong><strong class="red-pricing" ng-show="showAnnualDiscount()">&nbsp;{{data.discountedAnnualPricing | currency : $}}</strong></small>/year<span ng-show="showMonthly"> or <small><strong ng-class="monthlyDiscountClass()">${{data.monthlyPricing}}</strong><strong class="red-pricing" ng-show="showMonthlyDiscount()">&nbsp;{{data.discountedMonthlyPricing | currency : $}}</strong></small>/month</span>'}}]),pluralsightModule.controller("SignupController",["$scope","IndividualPricingRepository","$location",function(e,t,r){var n=r.search(),o=n.discountCode?n.discountCode:"";e.selectedSku=e.trialSelectedSku=n.sku,e.selectedBusinessSku="ENT-Y-STD",e.numberOfUsers=2,e.isTrial=n.isTrial&&"true"===n.isTrial.toLowerCase(),e.term=n.term&&"a"===n.term&&!e.isTrial?"annual":"monthly",t.getPricing(o).$promise.then(function(t){e.pricingData=t,e.loading=!1,e.pricingData.discount.monthlyIsDiscounted&&(e.term="monthly",e.isTrial=!1),e.pricingData.discount.annualIsDiscounted&&(e.term="annual",e.isTrial=!1)},function(){e.pricingData={"basicPricing":{"monthlyPricing":29,"annualPricing":299,"discountedMonthlyPricing":29,"discountedAnnualPricing":299},"plusPricing":{"monthlyPricing":49,"annualPricing":499,"discountedMonthlyPricing":49,"discountedAnnualPricing":499},"discount":{"showMonthlyPricing":!0},"trialAvailable":!0}}),e.subscribeClass=function(e){return e?"subscribe-and-trial":"subscribe-only"},e.getDiscountQueryString=function(e){return e?"&discountCode="+e:""},e.hasDiscount=function(){return e.pricingData?e.pricingData.discount.annualIsDiscounted||e.pricingData.discount.monthlyIsDiscounted:!1}}]),pluralsightModule.filter("truncateDecimal",function(){return function(e){return e?Math.floor(e):""}}),pluralsightModule.controller("StudyGroupsController",["$scope","StudyGroupsRepository",function(e,t){e.studyGroups=t.get(),e.getNumberOfUniqueCountries=function(){return e.studyGroups.length?_.uniq(e.studyGroups,!1,function(e){return e.country}).length:""}}]),pluralsightModule.directive("studyGroupsMap",function(){return{"restrict":"A","scope":{"studyGroups":"="},"link":function(e,t){function r(){o=new google.maps.Map(t[0],a);var r={"name":"Custom Style"},u=new google.maps.StyledMapType(i,r);o.mapTypes.set(s,u);for(var l=0;l<e.studyGroups.length;l++){var c='<div style="width:8em"><p><a href="'+e.studyGroups[l].url+'" target="_blank">'+e.studyGroups[l].cityRegion+", "+e.studyGroups[l].country+"</a></p></div>",d=new google.maps.InfoWindow({"content":c}),p=new google.maps.Marker({"position":new google.maps.LatLng(e.studyGroups[l].latitude,e.studyGroups[l].longitude),"map":o,"title":e.studyGroups[l].cityRegion});n(d,o,p)}}function n(e,t,r){google.maps.event.addListener(r,"click",function(){e.open(t,r)})}var o,s="custom_style",a={"zoom":2,"center":new google.maps.LatLng(10,0),"mapTypeControlOptions":{"mapTypeIds":[google.maps.MapTypeId.ROADMAP,s]},"mapTypeId":s},i=[{"stylers":[{"color":"#BBBBBB"},{"visibility":"simplified"}]},{"elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"water","stylers":[{"color":"#FFFFFF"}]}];e.$watch("studyGroups",function(){e.studyGroups.length>0&&r()},!0)}}}),pluralsightModule.service("StudyGroupsRepository",["$resource","baseUrls",function(e,t){return{"get":function(){var r=e(t.dataUrl+"/studygroups").query();return r}}}]),pluralsightModule.controller("SharedSubscribeController",function(){this.getSubscriptionText=function(e){switch(e.toUpperCase()){case"IND-Y-PLUS":return"Annual plus";case"IND-M-PLUS":return"Monthly plus";case"IND-Y-STD":return"Annual standard";default:return"Monthly standard"}},this.isPlusSubscription=function(e){return e.toUpperCase().indexOf("PLUS")>-1}}),pluralsightModule.controller("SubscribeStep1Controller",["$scope","GoogleDataLayerService",function(e,t){function r(){return{"sku":e.analytics.sku,"isTrial":e.analytics.isTrial,"showCaptcha":e.analytics.captchaEnabled,"failedCaptcha":!1}}function n(){var n=r();e.analytics.formErrorOnSubmit&&(n.substep="form_error_on_submit"),e.analytics.failedCaptcha&&(n.failedCaptcha=!0),t.pushVpv(n)}e.formErrorAlreadyReported=!1,n(),e.fieldOnBlur=function(n){if(!e.formErrorAlreadyReported&&n.$dirty&&n.$invalid){var o=r();o.substep="form_error",t.pushVpv(o),e.formErrorAlreadyReported=!0}}}]),pluralsightModule.controller("SubscribeStep2Controller",["$scope","GoogleDataLayerService",function(e,t){function r(){var e=n();t.pushVpv(e)}function n(){var t={"sku":e.analytics.sku,"isTrial":e.analytics.isTrial};return e.analytics.substep&&(t.substep=e.analytics.substep),t}function o(t){t+="";var r=t.substring(0,4);e.creditCardType=0==r.indexOf(4)?"visa":0==r.indexOf(34)||0==r.indexOf(37)?"amex":0==r.indexOf(6011)||0==r.indexOf(65)?"discover":0==r.indexOf(51)||0==r.indexOf(52)||0==r.indexOf(53)||0==r.indexOf(54)||0==r.indexOf(55)?"mastercard":""}e.formErrorAlreadyReported=!1,r(),e.creditCardEditor={"creditCard":{"number":""}},e.$watch("creditCardEditor.creditCard.number",o),e.fieldOnBlur=function(r){if(!e.formErrorAlreadyReported&&r.$dirty&&r.$invalid){var n={"sku":e.analytics.selectedSku,"isTrial":e.analytics.isTrial};n.substep="form_error",t.pushVpv(n),e.formErrorAlreadyReported=!0}}}]),pluralsightModule.controller("SubscribeStep3Controller",["$scope","GoogleDataLayerService",function(e,t){t.pushVpv(e.analytics.substep?{"sku":e.analytics.sku,"substep":e.analytics.substep}:{"sku":e.analytics.sku})}]),pluralsightModule.controller("SubscribeThankYouController",["$scope","GoogleDataLayerService",function(e,t){t.pushVpv({"sku":e.analytics.sku}),e.currentDate=new Date;var r=new Date;e.trialExpiration=r.setDate(r.getDate()+10)}]),pluralsightModule.controller("SearchController",["$scope","$location","SearchRepository","AuthorLinksService","UserRepository",function(e,t,r,n,o){function s(t){e.loading=!0,e.sort="relevance",e.selectedLevel=void 0,r.get(t).$promise.then(function(t){angular.forEach(t.courses,function(e,t){e.authorLinks=n.getAuthorLinks(e.authors,e.name),e.relevance=t,e.levelOrder=a(e.level)}),e.searchResult=t,e.loading=!1,e.isAuthenticated()&&o.getUserCourseRatings().$promise.then(function(t){angular.forEach(e.searchResult.courses,function(e){t[e.name]&&(e.courseRating.hasUserRatedCourse=!0,e.courseRating.rating=t[e.name])})})},function(){e.errorMessage="Search failed. Please try again.",e.loading=!1})}function a(e){switch(e){case"Beginner":return 0;case"Intermediate":return 1;case"Advanced":return 2;default:return 3}}e.$on("$locationChangeSuccess",function(){e.searchTerm=t.search().searchTerm,e.searchTerm&&s(e.searchTerm)}),e.keydown=function(t,r){var n=13;t.which===n&&e.search(r)},e.search=function(r){t.search("searchTerm",r),e.searchResult={"courses":[],"totalHits":0,"searchTerm":""},e.errorMessage="",""!==r&&s(r)},e.selectLevel=function(t){e.selectedLevel=t!=e.selectedLevel?t:void 0},e.hasSearchResults=function(){return e.searchResult&&""!==e.searchResult.searchTerm},e.numberOfCoursesFor=function(t){if(!e.searchResult)return 0;var r=_.countBy(e.searchResult.courses,function(e){return e.level})[t];return r||0}}]),pluralsightModule.directive("search",function(){return{"restrict":"E","replace":!0,"templateUrl":"/templates/search/search.html","controller":"SearchElementController","controllerAs":"searchController","scope":{"placeholder":"@?"}}}).controller("SearchElementController",["$scope","$window","baseUrls",function(e,t,r){this.placeholderText=e.placeholder?e.placeholder:"Search our library...",this.search=function(e){var n=e?encodeURIComponent(e):"";t.location.href=r.staticUrl+"/search/?searchTerm="+n}}]),pluralsightModule.service("SearchRepository",["$resource","baseUrls",function(e,t){return{"get":function(r){return e(t.dataUrl+"/search?searchTerm="+encodeURIComponent(r),{},{"get":{"method":"GET","withCredentials":!0}}).get()}}}]),pluralsightModule.controller("AllTagsController",["$scope","TagRepository","$location","GoogleDataLayerService","baseUrls",function(e,t,r,n,o){function s(t){e.tags=e.tags.concat(t.tagsForCurrentPage)}e.loading=!0,e.searchTerm="",e.pageNumber=1,e.numberOfTagsAvailable=0,e.$watch("pageSize",function(e){e&&(n.pushBrowseTagsDisplayCustomization("pageSize",e),r.search("pageSize",e),r.replace())}),e.$watch("sortOrder",function(e){e&&(n.pushBrowseTagsDisplayCustomization("sortOrder",e),r.search("sortOrder",e),r.replace())}),e.$on("$locationChangeSuccess",function(){var t=r.search();e.sortOrder||(e.sortOrder=t.sortOrder?t.sortOrder:"size"),e.pageSize||(e.pageSize=t.pageSize?t.pageSize:48),e.performServerSideSearch()}),e.performServerSideSearch=function(){var r="all"===e.pageSize?5e3:e.pageSize;e.pageNumber=1,t.searchAllTags(e.searchTerm,e.pageNumber,r,e.sortOrder).then(function(t){e.tags=t.tagsForCurrentPage,e.numberOfTagsAvailable=t.totalNumberOfTagsFound,e.loading=!1})},e.getMoreTags=function(){e.pageNumber++,t.searchAllTags(e.searchTerm,e.pageNumber,e.pageSize,e.sortOrder).then(s)},e.sort=function(t){e.sortOrder=t,e.performServerSideSearch()},e.buildViewAllLink=function(){return"http:"+o.staticUrl+"/tags?pageSize=all&sortOrder="+e.sortOrder}}]),pluralsightModule.service("TagRepository",["$resource","$q","tagUrlFilter","baseUrls",function(e,t,r,n){return{"getPopularTags":function(){var r=t.defer();return e(n.dataUrl+"/tags/popular").get(function(e){e.loaded=!0,r.resolve(e)}),r.promise},"getTopTags":function(){return e(n.dataUrl+"/tags/top").query()},"searchAllTags":function(o,s,a,i){var u=t.defer();return e(n.dataUrl+"/tags/search/"+r(o)+"/"+s+"?pageSize="+a+"&sortOrder="+i).get(function(e){e.loaded=!0,u.resolve(e)}),u.promise},"get":function(t){return e(n.dataUrl+"/tag/"+r(t)).get()},"getRelatedTags":function(t,o){return e(n.dataUrl+"/tags/related/"+r(t.join(","))+"?level="+o).query()},"getTagNames":function(t){return e(n.dataUrl+"/tags/tagnames/"+r(t)).get()}}}]),pluralsightModule.service("AuthorLeadRepository",["$resource","baseUrls",function(e,t){return{"submitLead":function(r){return e(t.dataUrl+"/authorlead",{},{"save":{"method":"POST"}}).save(r)}}}]),pluralsightModule.controller("TeachController",["$scope","AuthorLeadRepository",function(e,t){e.leadSubmitted=!1,e.serverErrorMessages=[],e.sendAuthorLead=function(r){e.serverErrorMessages=[],t.submitLead(r).$promise.then(function(){e.leadSubmitted=!0},function(t){var r="[object Array]"===Object.prototype.toString.call(t.data);e.serverErrorMessages=r?t.data:["An error occurred submitting your request"]})}}]),pluralsightModule.controller("CoursesByTagsController",["$scope","$rootScope","$location","CourseRepository","AuthorLinksService","TagRepository","$anchorScroll","$routeParams","$route","$document","GoogleDataLayerService","UserRepository","baseUrls",function(e,t,r,n,o,s,a,i,u,l,c,d,p){function g(t,r){e.errorMessage=t,e.notFound=404==r,e.courseResults={"totalNumberOfCoursesFound":0}}function f(t){_.isEqual(t,e.tags)||(e.tags=t,e.loading=!0,r.path(e.tags.join(",")),document.title=e.tags.join(", ")+" training – Pluralsight Training",m(),e.showRetiredCourses=!1,e.courseResults={"courses":[]},C=1,e.getMoreCourses(e.tags),h(e.tags))}function m(){t.meta={"tagNames":e.tags.join(",")},1===e.tags.length?s.get(e.tags[0]).$promise.then(function(r){e.singleTagDescription=r.description,e.singleTagAliases=""==r.aliases?"":"aka: "+r.aliases,t.meta.description=e.tags.join(", ")+" training. "+e.singleTagDescription}):(e.singleTagDescription="",e.singleTagAliases="",t.meta.description=e.tags.join(", ")+" training.")}function h(t){e.relatedTagsPages=1,e.tagFilter="",s.getRelatedTags(t,e.selectedLevel).$promise.then(function(t){e.relatedTags=t.sort(function(e,t){return t.multiplier-e.multiplier})})}function v(t,r){e.loading=!0;var o="all"===e.pageSize?5e3:e.pageSize;n.getCoursesByTags(t,C,o,e.sort,e.selectedLevel).$promise.then(function(t){y(t),e.courseResults={"courses":r.concat(t.courses),"totalNumberOfCoursesFound":t.totalNumberOfCoursesFound,"totalNumberOfRetiredCourses":t.totalNumberOfRetiredCourses,"courseLevelCounts":t.courseLevelCounts},e.loading=!1,e.isAuthenticated()&&d.getUserCourseRatings().$promise.then(function(e){_.each(t.courses,function(t){e[t.name]&&(t.courseRating.hasUserRatedCourse=!0,t.courseRating.rating=e[t.name])})})}),C++}function y(e){_.each(e.courses,function(e){e.authorLinks=o.getAuthorLinks(e.authors,e.name)})}var C=1;e.$watch("pageSize",function(e){e&&(c.pushTagDisplayCustomization("pageSize",e),r.search("pageSize",e),r.replace())}),e.$watch("sort",function(e){e&&(c.pushTagDisplayCustomization("sort",e),r.search("sort",e),r.replace())}),e.$watch("selectedLevel",function(e){void 0!==e&&(c.pushTagDisplayCustomization("level",e),""===e?r.search("level",null):r.search("level",e),r.replace())}),e.$on("$routeChangeSuccess",function(){if(!i.tagNames)return void g("Tag not found.",404);var t=i.tagNames.split(",");if(!_.isEqual(t,e.tags)){var n=r.search();e.sort||(e.sort=n.sort?n.sort:"new"),e.selectedLevel||(e.selectedLevel=n.level?n.level:""),e.pageSize||(e.pageSize=n.pageSize?n.pageSize:48),s.getTagNames(t).$promise.then(function(e){f(e.names)},function(e){g(e.data.message,e.status)})}}),e.sortBy=function(t){C=1,e.sort=t,e.loading=!0,e.courseResults.courses=[],e.getMoreCourses(e.tags)},e.selectedSort=function(t){return e.sort===t?"selected":""},e.showPaginationInFooter=function(e){return e.length>5},e.selectLevel=function(t){e.selectedLevel=t!=e.selectedLevel?t:"",e.courseResults={"courses":[]},e.getCoursesByPageSize(e.tags),h(e.tags)},e.getBeginnerCourseCount=function(){if(!e.courseResults||!e.courseResults.courseLevelCounts)return 0;var t=e.courseResults.courseLevelCounts;return e.showRetiredCourses?t.beginner:t.beginner-t.retiredBeginner},e.getIntermediateCourseCount=function(){if(!e.courseResults||!e.courseResults.courseLevelCounts)return 0;var t=e.courseResults.courseLevelCounts;return e.showRetiredCourses?t.intermediate:t.intermediate-t.retiredIntermediate},e.getAdvancedCourseCount=function(){if(!e.courseResults||!e.courseResults.courseLevelCounts)return 0;var t=e.courseResults.courseLevelCounts;return e.showRetiredCourses?t.advanced:t.advanced-t.retiredAdvanced},e.showRetiredCoursesFilter=function(){return e.courseResults&&e.courseResults.totalNumberOfRetiredCourses>0},e.getFilteredCourseCount=function(){return e.courseResults?e.showRetiredCourses?e.courseResults.totalNumberOfCoursesFound:e.courseResults.totalNumberOfCoursesFound-e.courseResults.totalNumberOfRetiredCourses:0},e.addRelatedTag=function(t){l.scrollTopAnimated(0);var r=e.tags.slice(0);r.push(t),f(r)},e.removeTag=function(t){var r=_.reject(e.tags,function(e){return e===t});f(r)},e.getMoreCourses=function(t){v(t,e.courseResults.courses)},e.getCoursesByPageSize=function(e){C=1,v(e,[])},e.getMoreRelatedTags=function(){e.relatedTagsPages+=1},e.buildViewAllLink=function(){if(!e.tags)return"";var t="http:"+p.staticUrl+"/tag/"+e.tags.join(",")+"?pageSize=all&sort="+e.sort;return e.selectedLevel?t+"&level="+e.selectedLevel:t}}]),pluralsightModule.filter("tagUrl",function(){return function(e){return encodeURIComponent(e).replace(/\./g,"%2E")}});