(function () { "use strict"; angular.module("enrMapModule") .factory("mapFillColorCalculator", ["$filter", "mapRegionLeaderCalculator", "regionPropertiesParser", "participationCalculator", "primaryService", "gradientService", function ($filter, mapRegionLeaderCalculator, regionPropertiesParser, participationCalculator, primaryService, gradientService) { return { calculateFillColorOffice: function (regionProperties, electionDataJson, colorData, DefaultOfficeSelection) { var fillColor = "#000000"; if (!DefaultOfficeSelection) { //try { var regionLeaderResults = mapRegionLeaderCalculator.determineLeader(electionDataJson, regionProperties); //} catch (e) { //return colorData.AdditionalColors.NOT_PARTICIPATING; //} switch (regionLeaderResults.scenario) { case mapRegionLeaderCalculator.resultScenarios.distinctLeader: if (primaryService.getIsPrimary() && !gradientService.isCurOfficeExcludedFromGradients()) { // Use Gradient Color //var candidateInfoWithGradients = gradientService.getGradientsByParty(regionLeaderResults.leaderCandidate.DISPLAY_COLOR); //var gradientColor = $filter("filter")(candidateInfoWithGradients, { NAME_ON_BALLOT: regionLeaderResults.leaderCandidate.NAME_ON_BALLOT })[0].GRADIENT_COLOR; //fillColor = gradientColor; fillColor = regionLeaderResults.leaderCandidate.DISPLAY_COLOR; } else fillColor = regionLeaderResults.leaderCandidate.DISPLAY_COLOR; break; case mapRegionLeaderCalculator.resultScenarios.tie: fillColor = colorData.AdditionalColors.TIE; break; case mapRegionLeaderCalculator.resultScenarios.noResults: fillColor = colorData.AdditionalColors.NO_RESULTS_BUT_PARTICIPATING; break; case mapRegionLeaderCalculator.resultScenarios.notParticipating: fillColor = colorData.AdditionalColors.NOT_PARTICIPATING; break; case mapRegionLeaderCalculator.resultScenarios.multipleLeaders: //fillColor = colorData.AdditionalColors.MULTIPLE_LEADERS; if (primaryService.getIsPrimary()) { var party = primaryService.getSelectedParty(); if (party == "D") { fillColor = colorData.AdditionalColors.MULTIPLE_LEADERS_DEMOCRATIC_PARTY_COLOR; } if (party == "R") { fillColor = colorData.AdditionalColors.MULTIPLE_LEADERS_REPUBLICAN_PARTY_COLOR; } } else { fillColor = colorData.AdditionalColors.MULTIPLE_LEADERS_GENERAL_ELECTION_COLOR; } break; } } else { if (primaryService.getIsPrimary()) { var party = primaryService.getSelectedParty(); if (party == "D") { fillColor = colorData.AdditionalColors.DEFAULT_SELECTION_DEMOCRATIC_PARTY_COLOR; } if (party == "R") { fillColor = colorData.AdditionalColors.DEFAULT_SELECTION_REPUBLICAN_PARTY_COLOR; } } else { fillColor = colorData.AdditionalColors.DEFAULT_SELECTION_GENERAL_ELECTION_COLOR; } } return fillColor; }, calculateFillColorReferendums: function (regionProperties, electionDataJson, colorData) { var fillColor; var regionIsParticipating = participationCalculator.isReferendumsRegionParticipatingFromSummaryJson(electionDataJson, regionProperties); if (regionIsParticipating) { var regionId = regionPropertiesParser.getRegionPrimaryId(regionProperties, false, true); var regionNodes = $filter("filter")(electionDataJson.Regions.Region, { FIPS: regionId.toString() }, true); var regionNode = regionNodes.length > 0 ? regionNodes[0] : undefined; if (Number(regionNode.Referendums.ALL_POSITIVE_RESULTS) + Number(regionNode.Referendums.ALL_NEGATIVE_RESULTS) === 0) fillColor = colorData.AdditionalColors.NO_RESULTS_BUT_PARTICIPATING; else fillColor = colorData.AdditionalColors.REFERENDUMS; } else fillColor = colorData.AdditionalColors.NOT_PARTICIPATING; return fillColor; } }; }]); }());