private void AddSingleVotingDayDataPoint (GeographyBallotCoverageDataPoint dataPoint, Series seriesPositiveSingle, Series seriesPositiveDouble, Series seriesPositiveFull, Series seriesNegative)
    {
        Geography geo = Geography.FromIdentity(dataPoint.GeographyId);

        Element element = new Element();
        element.YValue = (((absoluteMode ? dataPoint.VotingStationsDistroSingle : dataPoint.WVotingStationsDistroSingle)
                            - (absoluteMode ? dataPoint.VotingStationsDistroDouble : dataPoint.WVotingStationsDistroDouble)) * 100.0)
                            / (absoluteMode ? dataPoint.VotingStationsTotal : dataPoint.WVotingStationsTotal);
        double distroValue = ((absoluteMode ? dataPoint.VotingStationsDistroSingle : dataPoint.WVotingStationsDistroSingle) * 100.0)
                            / (absoluteMode ? dataPoint.VotingStationsTotal : dataPoint.WVotingStationsTotal);
        element.Name = geo.Name;
        element.SmartLabel = new SmartLabel();
        element.SmartLabel.DynamicDisplay = false;
        element.SmartLabel.Text = (distroValue).ToString("0.0");
        element.SmartLabel.Color = System.Drawing.Color.Black;

        if (CanZoom(dataPoint.GeographyId))
        {
            element.URL = "RelativeDistroStatus.aspx?" + (nav != "" ? "nav=y&" : "") + "VotingMode=ElectionDay&abs=" + (absoluteMode ? "Y" : "N") + "&CircuitId=" + dataPoint.GeographyId;
            // hack så att grafen inte blir helt hoptryckt i höjdled när man vill se status för hela sverige /pvz
            if (dataPoint.GeographyId == Geography.SwedenId)
            {
                element.URL += "&Height=5000";
            }
        }
        else if (!String.IsNullOrEmpty(dataPoint.BookingUrl))
        {
            element.URL = dataPoint.BookingUrl;
        }
        seriesPositiveSingle.Elements.Add(element);

        // Double coverage

        element = new Element();
        element.YValue = (((absoluteMode ? dataPoint.VotingStationsDistroDouble : dataPoint.WVotingStationsDistroDouble)
                            - (absoluteMode ? dataPoint.VotingStationsComplete : dataPoint.WVotingStationsComplete)) * 100.0)
                            / (absoluteMode ? dataPoint.VotingStationsTotal : dataPoint.WVotingStationsTotal);

        element.Name = geo.Name;

        if (CanZoom(dataPoint.GeographyId))
        {
            element.URL = "RelativeDistroStatus.aspx?" + (nav != "" ? "nav=y&" : "") + "VotingMode=ElectionDay&abs=" + (absoluteMode ? "Y" : "N") + "&CircuitId=" + dataPoint.GeographyId;
        }
        else if (!String.IsNullOrEmpty(dataPoint.BookingUrl))
        {
            element.URL = dataPoint.BookingUrl;
        }
        seriesPositiveDouble.Elements.Add(element);

        // full coverage - not yet implemented
        element = new Element();
        element.YValue = ((absoluteMode ? dataPoint.VotingStationsComplete : dataPoint.WVotingStationsComplete) * 100.0)
                            / (absoluteMode ? dataPoint.VotingStationsTotal : dataPoint.WVotingStationsTotal);

        element.Name = geo.Name;

        if (CanZoom(dataPoint.GeographyId))
        {
            element.URL = "RelativeDistroStatus.aspx?" + (nav != "" ? "nav=y&" : "") + "VotingMode=ElectionDay&abs=" + (absoluteMode ? "Y" : "N") + "&CircuitId=" + dataPoint.GeographyId;
        }
        else if (!String.IsNullOrEmpty(dataPoint.BookingUrl))
        {
            element.URL = dataPoint.BookingUrl;
        }
        seriesPositiveFull.Elements.Add(element);

        // neg bar
        element = new Element();
        element.YValue = (absoluteMode ? dataPoint.VotingCoverage : dataPoint.WVotingCoverage) - 100;
        element.Name = geo.Name;
        seriesNegative.Elements.Add(element);

        if (CanZoom(dataPoint.GeographyId))
        {
            element.URL = "RelativeDistroStatus.aspx?" + (nav != "" ? "nav=y&" : "") + "VotingMode=ElectionDay&abs=" + (absoluteMode ? "Y" : "N") + "&CircuitId=" + dataPoint.GeographyId;
        }
        else if (!String.IsNullOrEmpty(dataPoint.BookingUrl))
        {
            element.URL = dataPoint.BookingUrl;
        }
    }
    private void AddSingleVotingDayDataPoint (GeographyBallotCoverageDataPoint dataPoint, Series seriesPositiveSingle)
    {
        if (String.IsNullOrEmpty(Request.QueryString["CircuitId"]) && !CanZoom(dataPoint.GeographyId))
            return;

        Geography geo = Geography.FromIdentity(dataPoint.GeographyId);

        Element element = new Element();
        element.YValue = ((absoluteMode?dataPoint.VotingStationsTotal:dataPoint.WVotingStationsTotal) 
                         - (absoluteMode?dataPoint.VotingStationsDistroSingle:dataPoint.WVotingStationsDistroSingle));
        element.Name = geo.Name;
        element.SmartLabel = new SmartLabel();
        element.SmartLabel.Text = element.YValue.ToString("#,##0");
        element.SmartLabel.Color = System.Drawing.Color.Black;

        if (CanZoom(dataPoint.GeographyId))
        {
            element.URL = "AbsoluteBallotDistroStatus.aspx?VotingMode=ElectionDay&CircuitId=" + dataPoint.GeographyId;
        }
        else if (!String.IsNullOrEmpty(dataPoint.BookingUrl))
        {
            element.URL = dataPoint.BookingUrl;
        }
        seriesPositiveSingle.Elements.Add(element);



    }
    private void AddSingleAdvanceDataPoint (GeographyBallotCoverageDataPoint dataPoint, Series seriesPositive, Series seriesNegative)
    {
        Geography geo = Geography.FromIdentity(dataPoint.GeographyId);

        Element element = new Element();
        element.YValue = absoluteMode ? dataPoint.AdvanceVotingCoverage : dataPoint.WWAdvanceVotingCoverage;
        element.Name = geo.Name;
        element.SmartLabel = new SmartLabel();
        element.SmartLabel.Text = (absoluteMode ? dataPoint.AdvanceVotingCoverage : dataPoint.WWAdvanceVotingCoverage).ToString("0.0");
        element.SmartLabel.Color = System.Drawing.Color.Black;

        if (CanZoom(dataPoint.GeographyId))
        {
            element.URL = "RelativeDistroStatus.aspx?" + (nav != "" ? "nav=y&" : "") + "VotingMode=Advance&abs=" + (absoluteMode ? "Y" : "N") + "&CircuitId=" + dataPoint.GeographyId;
        }
        else if (!String.IsNullOrEmpty(dataPoint.BookingUrl))
        {
            element.URL = dataPoint.BookingUrl;
        }
        seriesPositive.Elements.Add(element);

        element = new Element();
        element.YValue = (absoluteMode ? dataPoint.AdvanceVotingCoverage : dataPoint.WWAdvanceVotingCoverage) - 100;
        element.Name = geo.Name;
        seriesNegative.Elements.Add(element);

        if (CanZoom(dataPoint.GeographyId))
        {
            element.URL = "RelativeDistroStatus.aspx?" + (nav != "" ? "nav=y&" : "") + "VotingMode=Advance&abs=" + (absoluteMode ? "Y" : "N") + "&CircuitId=" + dataPoint.GeographyId;
        }
        else if (!String.IsNullOrEmpty(dataPoint.BookingUrl))
        {
            element.URL = dataPoint.BookingUrl;
        }
    }