"use strict";angular.module("CCG.PMGNotes").constant("noteGrades",[{code:"1",grade:"1"},{code:"2",grade:"2"},{code:"4",grade:"4"},{code:"6",grade:"6"},{code:"8",grade:"8"},{code:"10",grade:"10"},{code:"12",grade:"12"},{code:"15",grade:"15"},{code:"20",grade:"20"},{code:"25",grade:"25"},{code:"25e",grade:"25 EPQ"},{code:"30",grade:"30"},{code:"30e",grade:"30 EPQ"},{code:"35",grade:"35"},{code:"35e",grade:"35 EPQ"},{code:"40",grade:"40"},{code:"40e",grade:"40 EPQ"},{code:"45",grade:"45"},{code:"45e",grade:"45 EPQ"},{code:"50",grade:"50"},{code:"50e",grade:"50 EPQ"},{code:"53",grade:"53"},{code:"53e",grade:"53 EPQ"},{code:"55",grade:"55"},{code:"55e",grade:"55 EPQ"},{code:"58",grade:"58"},{code:"58e",grade:"58 EPQ"},{code:"60",grade:"60"},{code:"60e",grade:"60 EPQ"},{code:"61",grade:"61"},{code:"61e",grade:"61 EPQ"},{code:"62",grade:"62"},{code:"62e",grade:"62 EPQ"},{code:"63",grade:"63"},{code:"63e",grade:"63 EPQ"},{code:"64",grade:"64"},{code:"64e",grade:"64 EPQ"},{code:"65e",grade:"65 EPQ"},{code:"66e",grade:"66 EPQ"},{code:"67e",grade:"67 EPQ"},{code:"68e",grade:"68 EPQ"},{code:"69e",grade:"69 EPQ"},{code:"70es",grade:"70 EPQ"},]);angular.module("CCG.PMGNotes").controller("homepageController",["$window",function(n){var t=this;t.grade="";t.lookup=function(){var i="/certlookup/"+t.certNumber+"/"+t.grade+"/";n.location.href=i}}]);angular.module("CCG.PMGNotes").controller("populationGridController",["$rootScope","$scope","$attrs","$timeout","populationReportService","gridFiltersService","scrollService","urlService",function(n,t,i,r,u,f,e,o){function p(){s.page!==1?o.replaceUrl(s.baseUrl,{page:1}):a(s.page)}function a(){var t=l?f.getSelectAllFilters():f.getFilters(),n=(new URI).search(!0);s.page=parseInt(n.page)||(l?null:1);s.requestNoteID=n.n;s.isLoading=!0;u.fetchNotes(v,y,s.page,t,s.requestNoteID).then(function(n){n.Items.forEach(function(n){n.EncodedNoteNumber=encodeURIComponent(n.NoteNumber)});s.requestNoteID&&n.Items.forEach(function(n){n.highlight=n.ImportNoteID.toString()===s.requestNoteID});s.page=n.Page;s.notes=n;s.isLoading=!1;!s.notes.Items||(s.displayIssuer=_.some(s.notes.Items,function(n){return!!n.Issuer}));c&&(c=!1)})}var s=this,v=i.categoryId,y=i.subcategoryId,h=(new URI).search(!0),l=h.grade,c;s.baseUrl=o.baseUrl;s.showNoteDetailsModal=!1;t.$on("$locationChangeSuccess",a);f.onDataFilterChanged(p);s.openNoteDetails=function(n){u.getNote(n).then(function(n){n&&(s.selectedNote=n,s.showNoteDetailsModal=!0)})};s.openBlockLetterOverlay=function(t){u.fetchBlockLettersForNote(t.NoteNumber).then(function(i){s.blockLetterNoteNumber=t.NoteNumber;s.blockLetterSeries=t.Series;s.blockLetterDenomination=t.Denomination;s.blockLetters=i.Items;r(function(){n.$broadcast("pmgGridStickyHeader.show.blockLetter");s.showBlockLetterOverlay=!0})})};s.closeBlockLetterOverlay=function(){s.showBlockLetterOverlay=!1};s.openTrackPricesOverlay=function(t){u.fetchTrackPricesForNote(t.NoteNumber,t.Series).then(function(i){s.trackPricesNoteNumber=t.NoteNumber;s.trackPricesSeries=t.Series;s.trackPricesDenom=t.Denomination;s.trackPrices=i;r(function(){n.$broadcast("pmgGridStickyHeader.show.trackPrices");s.showTrackPricesOverlay=!0})})};s.closeTrackPricesOverlay=function(){s.showTrackPricesOverlay=!1};s.changePage=function(n){o.replaceUrl(s.baseUrl,{page:n})};c=!0;h=(new URI).search(!0);s.requestNoteID=h.n;s.requestNoteID&&(s.openNoteDetails(s.requestNoteID),r(function(){e.scrollToElement(".row-highlight",null,-200)},1e3))}]);angular.module("CCG.PMGNotes").factory("populationReportService",["webServiceFactory",function(n){return n.create({fetchNotes:function(n,t,i,r,u){var e={type:!t?"category":"subcategory",id:t||n},f=URI.expand("/population-report/data/{type}/{id}/notes/",e);return f.addSearch({page:i,fromYear:r.fromYear,toYear:r.toYear,issuer:r.issuer,noteID:u}),this.get(f.toString())},fetchYears:function(n,t){var i={type:!t?"category":"subcategory",id:t||n},r=URI.expand("/population-report/data/{type}/{id}/years/",i);return this.get(r.toString())},fetchIssuers:function(n,t){var i={type:!t?"category":"subcategory",id:t||n},r=URI.expand("/population-report/data/{type}/{id}/issuers",i);return this.get(r.toString())},getNote:function(n){var t=URI.expand("/population-report/data/note/?noteID={noteID}",{noteID:n});return this.get(t.toString())},fetchBlockLettersForNote:function(n){var t=URI.expand("/population-report/data/block-letters/?noteNumber={noteNumber}",{noteNumber:n});return this.get(t.toString())},fetchTrackPricesForNote:function(n,t){var i=URI.expand("/population-report/data/track-prices/?noteNumber={noteNumber}&series={series}",{noteNumber:n,series:t});return this.get(i.toString())}})}]);angular.module("CCG.PMGNotes").component("pmgGrid",{templateUrl:["$attrs",function(n){var t=n.template||"grid";return"/resources/scripts/population-report/components/grid/"+t+".html"}],transclude:!0,bindings:{notes:"<"},controller:["$attrs","$element","$timeout","gridFiltersService","windowWatcher","pmgScrollService","pmgWindowService",function(n,t,i,r,u,f,e){function v(n){var i=[],r=t.find(".scrollable th[grade='"+n.fromGrade+"']").index(),u=t.find(".scrollable th[grade='"+n.toGrade+"']").index()+2,f;r>0&&i.push(":nth-child(-n + "+r+")");u>=0&&i.push(":nth-child(n + "+u+")");n.base||i.push(".base",".epq",".epq-star");n.star||i.push(".epq",".star");n.base&&n.star&&i.push(".epq-star");f=i.map(function(n){return".scrollable td"+n+", \n.scrollable th"+n}).join(", \n");a.text(f+" { display: none; }")}function y(n){n&&t.find(".pinned tr, .scrollable tr").addClass("needs-alignment").css({height:""});var i=t.find(".pinned tr.needs-alignment").removeClass("needs-alignment").toArray(),r=t.find(".scrollable tr.needs-alignment").removeClass("needs-alignment").toArray();i.forEach(function(n,t){var u=$(n),f=$(r[t]);if(u[0]&&f[0]){var e=u[0].getBoundingClientRect().height,o=f[0].getBoundingClientRect().height,i=Math.max(e,o);e!==i&&u.height(i);o!==i&&f.height(i)}})}function b(){y(!1)}function k(){y(!0)}function g(n){requestAnimationFrame(function(){(t.find(".focused:not('.persist')").removeClass("focused"),n.addClass("focused"),s=n.attr("grade"),s!==p)&&($(".highlight[grade!="+s+"]").removeClass("highlight"),$("[grade="+s+"]").addClass("highlight"),p=s)})}function nt(){var n=t.find(".row-highlight");n.length!==0&&f.performScroll(n,250,null,-200,null)}function tt(){var n=t.find(".row-highlight td.focused.persist");n&&n.length!=0&&it(n)}function it(n){var t=e.getElementOffset(n);t.left<0?o.scrollLeft(o.width()-Math.abs(t.left)):o.scrollLeft(o.width()+t.left);o.scrollLeft(t.left-o.width())}var h=this,c=(new URI).search(!0),l=!!c.grade,o,w,a;h.highlightColumnGrade=c.grade;h.$onInit=function(){var i,n;u.onResize(k,50);r.onVisualFilterChanged(v);i=l?r.getSelectAllFilters():r.getFilters();v(i);n=!1;t.on("mousedown",".scrollable td",function(){n=!0}).on("mouseup",".scrollable td",function(){n=!1}).on("mouseover",".scrollable td",function(t){var i=$(t.target);n||d(i)})};h.$onChanges=function(n){n.notes&&i(b);var r=$(".scrollable tr.row-highlight td.request-grade");r&&r.addClass("focused").addClass("persist");o=t.find(".scrollable");w=o.find("table");l&&i(function(){nt();tt()})};a=t.find("style");var p=null,s=null,d=_.throttle(g,16)}]});angular.module("CCG.PMGNotes").service("gridFiltersService",["$q","noteGrades","storageService","populationReportService",function(n,t,i,r){var u=null,f=[],e=[];return{STORAGE_KEY:"gridFilters",onDataFilterChanged:function(n){f.push(n)},onVisualFilterChanged:function(n){e.push(n)},dataFilterChanged:function(n){f.forEach(function(t){t(n)})},visualFilterChanged:function(n){e.forEach(function(t){t(n)})},fetchFilterOptions:function(i,u){return n.all([r.fetchYears(i,u),r.fetchIssuers(i,u)]).then(function(n){return{years:n[0],issuers:n[1],grades:t}})},getFilters:function(){return u||(u=i.get(this.STORAGE_KEY)||{base:!0,star:!1,fromGrade:_.first(t).code,toGrade:_.last(t).code,issuer:""}),u},getSelectAllFilters:function(){return u||(u={base:!0,star:!0,fromGrade:_.first(t).code,toGrade:_.last(t).code,issuer:""}),u},saveFilters:function(){var n=angular.copy(u);delete n.fromYear;delete n.toYear;delete n.issuer;i.set(this.STORAGE_KEY,n)}}}]);angular.module("CCG.PMGNotes").component("pmgGridFilters",{templateUrl:"/Resources/scripts/population-report/components/grid-filters/grid-filters.html",bindings:{hideYears:"<",gridKey:"@",categoryId:"@",subcategoryId:"@",filtersLabel:"@",showFiltersLabel:"@",fromLabel:"@",toLabel:"@",yearLabel:"@",gradeLabel:"@",issuerLabel:"@",baseGradesLabel:"@",starGradesLabel:"@"},controller:["$rootScope","gridFiltersService",function(n,t){function f(n){t.saveFilters();n?t.dataFilterChanged(i.filters):t.visualFilterChanged(i.filters)}function e(){if(i.filters){var f=_.findIndex(u,{code:i.filters.fromGrade}),n=_.findIndex(u,{code:i.filters.toGrade}),e=r.indexOf(i.filters.fromYear),t=r.indexOf(i.filters.toYear);t===-1&&(t=r.length);n===-1&&(n=u.length);i.fromGradeList=_.take(u,n+1);i.toGradeList=_.drop(u,f);i.fromYearList=_.take(r,t+1);i.toYearList=_.drop(r,e)}}var i=this,r,u,o=(new URI).search(!0),s=!!o.grade;i.$onInit=function(){i.fromGradeList=[];i.toGradeList=[];i.fromYearList=[];i.toYearList=[];t.fetchFilterOptions(i.categoryId,i.subcategoryId).then(function(n){r=n.years;u=n.grades;i.fromYearList=r;i.toYearList=r;i.fromGradeList=u;i.toGradeList=u;i.issuerList=n.issuers;i.filters=s?t.getSelectAllFilters():t.getFilters();i.filters.fromYear=_.first(i.fromYearList);i.filters.toYear=_.last(i.toYearList)});t.onDataFilterChanged(e);t.onVisualFilterChanged(e)};i.applyDataFilter=function(){f(!0)};i.applyVisualFilter=function(){f(!1);n.$broadcast("pmgGridStickyHeader.reload."+i.gridKey)}}]});angular.module("CCG.PMGNotes").component("pmgOffcanvasPane",{templateUrl:"/Resources/scripts/population-report/components/offcanvas-pane/offcanvas-pane.html",transclude:{"header-content":"headerContent","body-content":"bodyContent"},bindings:{isOpen:"<",onClosed:"&"},controller:["$element",function(n){var t=this;t.$postLink=function(){n.appendTo("body")};t.$onChanges=function(n){n.isOpen&&$("body").toggleClass("no-scroll",!!n.isOpen.currentValue)};t.close=function(){t.onClosed()}}]});angular.module("CCG.PMGNotes").directive("pmgGridStickyHeader",["scrollService",function(n){return{link:function(t,i,r){function s(){nt();e&&(k(),h())}function b(n){e=n!==undefined?n:!e;e?(nt(),k(),h()):d()}function h(){p.css({position:"relative",left:u[0].scrollLeft*-1+"px"})}function k(){o.appendTo(r.appendTo);w.append(y).append(c).appendTo(o);u.on("scroll",h);$(window).on("resize",s);u.trigger("scroll");n.registerOffsetElement(i)}function d(){o.remove();o.html("");w.html("");u&&u.off("scroll",h);$(window).off("resize",s);n.deregisterOffsetElement(i)}function g(n,t){var u=n.find("tr.header-row"),f=u.find("th").map(function(){return this.getBoundingClientRect().width}),i=u.clone(),r=$("<div>").addClass("pinned-header-wrap").addClass(t);return i.length===0&&r.addClass("empty"),$("<table>").append(i).appendTo(r),i.find("th").each(function(n){$(this).css("min-width",f[n])}),r}function nt(){d();l=$(r.container);f=l.find(r.gridSelector);u=f.find(".scrollable");a=f.find(".pinned table:first-child");v=f.find(".scrollable table:first-child");y=g(a,"pinned");c=g(v,"scrollable",!0);p=c.find("table")}var ut=this,l,f,u,a,v,y,c,p,e,o=$("<div>").addClass(r.wrapperClasses),w=$("<div>").addClass(r.gridClasses),tt=t.$on("pmgGridStickyHeader.show."+r.gridKey,function(){b(!0)}),it=t.$on("pmgGridStickyHeader.hide."+r.gridKey,function(){b(!1)}),rt=t.$on("pmgGridStickyHeader.reload."+r.gridKey,s);t.$on("$destroy",function(){tt();it();rt();n.deregisterOffsetElement(i)});s()}}}]);angular.module("CCG.PMGNotes").component("pmgScrollPointEvent",{bindings:{onTriggered:"<",onRestored:"<",unthrottled:"<",disabled:"<",triggerOffset:"@",restoreOffset:"@"},controller:["$element","$scope","scrollService",function(n,t,i){function e(t){if(r.disabled){i.deregisterOnScroll(n);return}if(t&&(!u||r.onRestored)){var e=i.getGlobalOffset(),o=n[0].getBoundingClientRect(),s=r.triggerOffset?parseFloat(r.triggerOffset):0,h=o.top+t.top+s-e,c=r.restoreOffset?parseFloat(r.restoreOffset):0,l=o.top+t.top+c-e;t.top>=h&&!u?(u=!0,f(r.onTriggered)):t.top<l&&u&&(u=!1,f(r.onRestored))}}function f(n){var i=typeof n;switch(i){case"string":t.$emit(n);break;case"function":n()}}var r=this,u=!1;r.$onInit=function(){i.registerOnScroll(n,e,r.unthrottled)};r.$onDestroy=function(){i.deregisterOnScroll(n)}}]});angular.module("CCG.PMGNotes").component("pmgStickyElement",{controller:["$element","$window","scrollService",function(n,t,i){function o(){var f=n.offset().top,o=t.pageYOffset;o>f&&!r?(e=f,n.addClass("fixed").appendTo("body"),u.removeClass("hide"),r=!0,i.registerOffsetElement(n)):o<e&&r&&(u.addClass("hide").before(n),n.removeClass("fixed"),r=!1,i.deregisterOffsetElement(n))}var f=this,e,r,u;f.$onInit=function(){u=n.clone().css("opacity",0).addClass("hide");n.after(u);i.registerOnScroll(n,o,!0)};f.$onDestroy=function(){i.deregisterOnScroll(n);i.deregisterOffsetElement(n)}}]});angular.module("CCG.PMGNotes").service("pmgScrollService",["$rootScope","$window","pmgWindowService",function(n,t,i){function h(n,t,i,r){return n>t?i:n<t?r:void 0}function v(){var n=i.getViewportScroll();n.directionX=h(n.x,o.x,"right","left");n.directionY=h(n.y,o.y,"down","up");r&&r.length>0&&r.forEach(function(t){t.callback(n)});o=n}function y(){v(a)}function w(){v(l)}function p(){e=_.sumBy(f,"offset")||0}var u=this,o=i.getViewportScroll(),c=_.throttle(w,100),s=angular.element(t),r,l,a,e,f;s.on("resize scroll mousewheel",y);s.on("resize scroll mousewheel",c);s.ready(function(){y();c()});r=[];u.registerOnScroll=function(n,t,i){r.push({element:n,callback:t,noDelay:i});l=_.filter(r,{noDelay:undefined});a=_.filter(r,{noDelay:!0})};u.deregisterOnScroll=function(n){_.remove(r,{element:n})};u.getDirection=h;e=0;u.performScroll=function(n,r,u,f,o){if(n=angular.element(n),f=o?f:e+f,r)n.velocity("scroll",{duration:r,offset:f,container:u});else{var s=i.getElementOffset(n);(u||t).scrollTo(0,s.top-f)}};f=[];u.registerOffsetElement=function(n){_.some(f,{element:n})||(f.push({element:n,offset:n[0].offsetHeight}),p())};u.deregisterOffsetElement=function(n){_.remove(f,{element:n});p()};u.getGlobalOffset=function(n){return n?_.sumBy(_.reject(f,{element:n}),"offset"):e}}]);angular.module("CCG.PMGNotes").service("pmgWindowService",["$window",function(n){var t=this;t.getViewportScroll=function(){return{x:n.pageXOffset,y:n.pageYOffset}};t.getElementOffset=function(n){var u=angular.element(n),i=u[0].getBoundingClientRect(),r=t.getViewportScroll();return{top:i.top+r.y,left:i.left+r.x,right:i.right+r.x,bottom:i.bottom+r.y}}}])