public void Calculate() throws ExecutionException, InterruptedException {
        //Spin the snowflake
        imgCalculate.setVisible(true);
        
        imgCalculate.setImage(new javafx.scene.image.Image(getClass().getResourceAsStream("/image/snowflake_blue.png")));
        
        rt = new RotateTransition(Duration.millis(2000), imgCalculate);
        rt.setByAngle(720);
        rt.setCycleCount(Animation.INDEFINITE);
        rt.setAutoReverse(false);

        rt.play();
        
        
        //Call a reset to clear any previous data
        Reset();

        //Date setup

        if (optToday.isSelected()) {
            //Set dayrun to 0 (Today)
            dayrun = 0;

        } else if (optTomorrow.isSelected()) {
            //Set dayrun to 1 (Tomorrow)
            dayrun = 1;
        }

        //Have the user input past snow days
        days = lstDays.getSelectionModel().getSelectedIndex();

        closingsScraper = new ClosingsScraper(dayrun, closingsModel -> {
            mClosingsModel = closingsModel;
            if (closingsScraper.isCancelled()) {
                //Closings scraper has failed.
                txtGB.setText(closingsModel.error);
            } else {
                //Set the school percent.
                schoolpercent = closingsModel.schoolpercent;

                txtGB.setText(closingsModel.GBText);
                if (closingsModel.GB) {
                    txtGB.setStyle("-fx-control-inner-background: orange");
                }

                setSchoolText(txtAtherton, 0, closingsModel.Atherton);
                setSchoolText(txtBendle, 1, closingsModel.Bendle);
                setSchoolText(txtBentley, 2, closingsModel.Bentley);
                setSchoolText(txtCarman, 3, closingsModel.Carman);
                setSchoolText(txtFlint, 4, closingsModel.Flint);
                setSchoolText(txtGoodrich, 5, closingsModel.Goodrich);
                setSchoolText(txtBeecher, 6, closingsModel.Beecher);
                setSchoolText(txtClio, 7, closingsModel.Clio);
                setSchoolText(txtDavison, 8, closingsModel.Davison);
                setSchoolText(txtFenton, 9, closingsModel.Fenton);
                setSchoolText(txtFlushing, 10, closingsModel.Flushing);
                setSchoolText(txtGenesee, 11, closingsModel.Genesee);
                setSchoolText(txtKearsley, 12, closingsModel.Kearsley);
                setSchoolText(txtLKFenton, 13, closingsModel.LKFenton);
                setSchoolText(txtLinden, 14, closingsModel.Linden);
                setSchoolText(txtMontrose, 15, closingsModel.Montrose);
                setSchoolText(txtMorris, 16, closingsModel.Morris);
                setSchoolText(txtSzCreek, 17, closingsModel.SzCreek);
                setSchoolText(txtDurand, 18, closingsModel.Durand);
                setSchoolText(txtHolly, 19, closingsModel.Holly);
                setSchoolText(txtLapeer, 20, closingsModel.Lapeer);
                setSchoolText(txtOwosso, 21, closingsModel.Owosso);
                setSchoolText(txtGBAcademy, 22, closingsModel.GBAcademy);
                setSchoolText(txtGISD, 23, closingsModel.GISD);
                setSchoolText(txtHolyFamily, 24, closingsModel.HolyFamily);
                setSchoolText(txtWPAcademy, 25, closingsModel.WPAcademy);
            }
        });

        closingsScraper.execute();

        weatherScraper = new WeatherScraper(dayrun, weatherModel -> {
            if (weatherScraper.isCancelled()) {
                //Weather scraper has failed.
                lblNWS.setText(weatherModel.error
                        + "\n" + bundle.getString("CalculateWithoutWeather"));
            }else{
                //Set the weather percent
                weatherpercent = weatherModel.weatherpercent;

                Platform.runLater(() -> lblNWS.setText(weatherModel.warningTitles.get(0)));
                lstWeather.setItems(FXCollections.observableArrayList(weatherModel.warningTitles));
                lstWeather.getItems().remove(0);

                lstWeather.setOnMouseClicked(click -> {

                    if (click.getClickCount() == 2) {
                        int i = lstWeather.getSelectionModel().getSelectedIndex();

                        if (weatherModel.weatherWarningsPresent) {
                            try {
                                new WeatherDialog().display(
                                        weatherModel.warningTitles.get(i + 1),
                                        weatherModel.warningSummaries.get(i - 1),
                                        weatherModel.warningLinks.get(i + 1));
                            }catch (NullPointerException | IndexOutOfBoundsException e) {
                                new WeatherDialog().display(null, bundle.getString("WarningParseError"), null);
                            }
                        }
                    }
                });
            }
        });

        weatherScraper.execute();

        //Final Percent Calculator
        Thread percentThread = new Thread(new PercentCalculate());
        percentThread.start();

    }