Example usage for org.joda.time DateTimeZone nextTransition

List of usage examples for org.joda.time DateTimeZone nextTransition

Introduction

In this page you can find the example usage for org.joda.time DateTimeZone nextTransition.

Prototype

public abstract long nextTransition(long instant);

Source Link

Document

Advances the given instant to where the time zone offset or name changes.

Usage

From source file:com.funambol.common.pim.converter.TimeZoneHelper.java

License:Open Source License

/**
 * Extract time-zone information from a zoneinfo (Olson database) ID and
 * saves them in the TimeZoneHelper fields.
 *
 * @param id the time zone ID according to the zoneinfo (Olson) database
 * @param from the start of the relevant time interval for the generation of
 *             transitions (an istant expressed as a long)
 * @param to the end of the relevant time interval for the generation of
 *           transitions (an istant expressed as a long)
 *//*w  w w .  j a v a 2 s  .c om*/
protected void processID(String id, long from, long to) {

    DateTimeZone tz = DateTimeZone.forID(id);
    if (name == null) { // The name could have been set already using TZID
                        // and in this case it is important not to change it
        name = id; // The Olson ID is perfect as a unique name
    }
    basicOffset = tz.getStandardOffset(from);
    transitions.clear();

    if (!tz.isFixed()) {

        long oldFrom = from;
        from = fixFrom(tz, basicOffset, oldFrom);

        //@todo Consider case when to go beyond last transition (cycle 
        //could become endless)
        while (tz.getStandardOffset(to) != tz.getOffset(to)) {
            to = tz.nextTransition(to);
        }

        while ((from <= to) && (oldFrom != from)) {
            transitions.add(new TimeZoneTransition(tz.getOffset(from), from, id));
            oldFrom = from;
            from = tz.nextTransition(oldFrom);
        }
    }
}

From source file:com.funambol.common.pim.converter.TimeZoneHelper.java

License:Open Source License

private boolean matchesID(String idToCheck) {

    DateTimeZone tz;

    try {//w ww  .java2  s .  c  o m
        tz = DateTimeZone.forID(idToCheck);
    } catch (IllegalArgumentException e) { // the ID is not recognized
        return false;
    }

    if (getTransitions().size() == 0) { // No transitions
        if (tz.getStandardOffset(REFERENCE_TIME) != basicOffset) {
            return false; // Offsets don't match: wrong guess
        }
        if (tz.isFixed() || (REFERENCE_TIME == tz.nextTransition(REFERENCE_TIME))) {
            return true; // A right fixed or currently-fixed time zone
                         // has been found
        }
        return false; // Wrong guess
    }

    long t = getTransitions().get(0).getTime() - 1;
    if (tz.getStandardOffset(t) != basicOffset) {
        return false; // Wrong guess
    }

    for (TimeZoneTransition transition : getTransitions()) {
        t = tz.nextTransition(t);
        if (!isClose(t, transition.getTime())) {
            return false; // Wrong guess
        }
        if (tz.getOffset(t) != transition.getOffset()) {
            return false; // Wrong guess
        }
    }
    return true; // A right non-fixed time zone has been found

}

From source file:com.funambol.common.pim.converter.TimeZoneHelper.java

License:Open Source License

protected long fixFrom(DateTimeZone tz, int standardOffset, long from) {

    if (standardOffset != tz.getOffset(from)) { // NB: this must NOT be
        // a call to getBasicOffset(), because that method may be
        // overriden by the cached implementation(s) of this class.
        do {//  w  w w .j av a  2s.  com
            from = tz.previousTransition(from) + 1;
        } while ((from != 0) && (standardOffset == tz.getOffset(from)));
    } else {
        from = tz.nextTransition(from);
    }
    return from;
}

From source file:com.google.ical.compat.jodatime.TimeZoneConverter.java

License:Apache License

/**
 * return a <code>java.util.Timezone</code> object that delegates to
 * the given Joda <code>DateTimeZone</code>.
 */// w ww .j a  v  a  2  s . com
public static TimeZone toTimeZone(final DateTimeZone dtz) {

    TimeZone tz = new TimeZone() {
        @Override
        public void setRawOffset(int n) {
            throw new UnsupportedOperationException();
        }

        @Override
        public boolean useDaylightTime() {
            long firstTransition = MILLIS_SINCE_1_JAN_2000_UTC;
            return firstTransition != dtz.nextTransition(firstTransition);
        }

        @Override
        public boolean inDaylightTime(Date d) {
            long t = d.getTime();
            return dtz.getStandardOffset(t) != dtz.getOffset(t);
        }

        @Override
        public int getRawOffset() {
            return dtz.getStandardOffset(0);
        }

        @Override
        public int getOffset(long instant) {
            // This method is not abstract, but it normally calls through to the
            // method below.
            // It's optimized here since there's a direct equivalent in
            // DateTimeZone.
            // DateTimeZone and java.util.TimeZone use the same
            // epoch so there's no translation of instant required.
            return dtz.getOffset(instant);
        }

        @Override
        public int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds) {
            int millis = milliseconds; // milliseconds is day in standard time
            int hour = millis / MILLISECONDS_PER_HOUR;
            millis %= MILLISECONDS_PER_HOUR;
            int minute = millis / MILLISECONDS_PER_MINUTE;
            millis %= MILLISECONDS_PER_MINUTE;
            int second = millis / MILLISECONDS_PER_SECOND;
            millis %= MILLISECONDS_PER_SECOND;
            if (era == GregorianCalendar.BC) {
                year = -(year - 1);
            }

            // get the time in UTC in case a timezone has changed it's standard
            // offset, e.g. rid of a half hour from UTC.
            DateTime dt = null;
            try {
                dt = new DateTime(year, month + 1, day, hour, minute, second, millis, dtz);
            } catch (IllegalArgumentException ex) {
                // Java does not complain if you try to convert a Date that does not
                // exist due to the offset shifting forward, but Joda time does.
                // Since we're trying to preserve the semantics of TimeZone, shift
                // forward over the gap so that we're on a time that exists.
                // This assumes that the DST correction is one hour long or less.
                if (hour < 23) {
                    dt = new DateTime(year, month + 1, day, hour + 1, minute, second, millis, dtz);
                } else { // Some timezones shift at midnight.
                    Calendar c = new GregorianCalendar();
                    c.clear();
                    c.setTimeZone(TimeZone.getTimeZone("UTC"));
                    c.set(year, month, day, hour, minute, second);
                    c.add(Calendar.HOUR_OF_DAY, 1);
                    int year2 = c.get(Calendar.YEAR), month2 = c.get(Calendar.MONTH),
                            day2 = c.get(Calendar.DAY_OF_MONTH), hour2 = c.get(Calendar.HOUR_OF_DAY);
                    dt = new DateTime(year2, month2 + 1, day2, hour2, minute, second, millis, dtz);
                }
            }
            // since millis is in standard time, we construct the equivalent
            // GMT+xyz timezone and use that to convert.
            int offset = dtz.getStandardOffset(dt.getMillis());
            DateTime stdDt = new DateTime(year, month + 1, day, hour, minute, second, millis,
                    DateTimeZone.forOffsetMillis(offset));
            return getOffset(stdDt.getMillis());
        }

        @Override
        public String toString() {
            return dtz.toString();
        }

        @Override
        public boolean equals(Object that) {
            if (!(that instanceof TimeZone)) {
                return false;
            }
            TimeZone thatTz = (TimeZone) that;
            return getID().equals(thatTz.getID()) && hasSameRules(thatTz);
        }

        @Override
        public int hashCode() {
            return getID().hashCode();
        }

        private static final long serialVersionUID = 58752546800455L;
    };
    // Now fix the tzids.  DateTimeZone has a bad habit of returning
    // "+06:00" when it should be "GMT+06:00"
    String newTzid = cleanUpTzid(dtz.getID());
    tz.setID(newTzid);
    return tz;
}

From source file:com.landenlabs.all_devtool.ClockFragment.java

License:Open Source License

/**
 * Update clock on screen/*from w w  w.j  av  a  2  s. c  o m*/
 */
private void updateClock() {
    m_date.setTime(System.currentTimeMillis());
    m_timeZone = TimeZone.getDefault();
    s_timeZoneFormat.setTimeZone(m_timeZone);
    String localTmStr = s_timeZoneFormat.format(m_date);

    m_clockLocalTv.setText(localTmStr);
    String gmtTmStr = s_timeGmtFormat.format(m_date);
    m_clockGmtTv.setText(gmtTmStr);

    long currDay = TimeUnit.DAYS.convert(System.currentTimeMillis(), TimeUnit.MILLISECONDS);
    m_timePartsTv.setText(String.format("Days since Jan 1 1970: %d", currDay));

    Locale ourLocale = Locale.getDefault();
    StringBuilder tzStr1 = new StringBuilder();
    StringBuilder tzStr2 = new StringBuilder();

    tzStr1.append(String.format("Locale %s\n", ourLocale.getDisplayName()));

    tzStr1.append(getTzDetailStr(m_timeZone));
    tzStr1.append("Daylight Savings:\n");

    // tzStr.append((m_timeZone.useDaylightTime() ? "Has" : "No") + " daylight savings\n");
    String ds_short = m_timeZone.getDisplayName(false, TimeZone.SHORT, ourLocale);
    tzStr1.append(
            String.format("    %s=%s\n", ds_short, m_timeZone.getDisplayName(false, TimeZone.LONG, ourLocale)));
    if (m_timeZone.useDaylightTime()) {
        String std_short = m_timeZone.getDisplayName(true, TimeZone.SHORT, ourLocale);
        tzStr1.append(String.format("    %s=%s\n", std_short,
                m_timeZone.getDisplayName(true, TimeZone.LONG, ourLocale)));

        // ----
        // DateTimeZone zone1 = DateTimeZone.forID("Europe/London");
        // DateTimeZone zone2 = DateTimeZone.forID("America/New_York");

        DateTimeZone zone = DateTimeZone.forTimeZone(m_timeZone);
        DateTimeFormatter format = DateTimeFormat.mediumDateTime();

        long current = System.currentTimeMillis();
        for (int i = 0; i < 4; i++) {
            long next = zone.nextTransition(current);
            if (current == next) {
                break;
            }

            tzStr1.append(String.format("    %s %s\n",
                    zone.isStandardOffset(next - 3600000) ? std_short : ds_short, format.print(next)));
            current = next;
        }
        m_localeTv.setText(tzStr1.toString());

        String[] ids = TimeZone.getAvailableIDs();
        if (ids != null && ids.length > 0) {
            switch (m_daylightFilter) {
            case NoDS:
                tzStr2.append("TimeZones (no Daylight savings):\n");
                break;
            case HasDS:
                tzStr2.append("TimeZone (Has Daylight savings):\n");
                break;
            case InDS:
                tzStr2.append("TimeZone (In Daylight savings):\n");
                break;
            }

            SparseIntArray zones = new SparseIntArray();
            for (int tzIdx = 0; tzIdx < ids.length; tzIdx++) {
                TimeZone tz = TimeZone.getTimeZone(ids[tzIdx]);
                boolean addTz = false;
                switch (m_daylightFilter) {
                case NoDS:
                    addTz = !tz.useDaylightTime();
                    break;
                case HasDS:
                    addTz = tz.useDaylightTime() && !tz.inDaylightTime(m_date);
                    break;
                case InDS:
                    addTz = tz.inDaylightTime(m_date);
                    break;
                }
                if (addTz) {
                    zones.put(tz.getRawOffset(), tzIdx);
                }
            }

            for (int idx = 0; idx != zones.size(); idx++) {
                TimeZone tz = TimeZone.getTimeZone(ids[zones.valueAt(idx)]);
                tzStr2.append(getTzOffsetStr(tz, s_timeFormat));
            }
        }

    }
    m_dayLight.setText(tzStr2.toString());

    m_clockSysClkUpTm.setText("uptimeMillis:" + formatInterval(SystemClock.uptimeMillis()));
    m_clockSysClkReal.setText("elapsedRealtime:" + formatInterval(SystemClock.elapsedRealtime()));
}

From source file:com.microsoft.exchange.utils.TimeZoneHelper.java

License:Open Source License

private static long setTransitionTime(DateTimeZone zone, long now, SerializableTimeZone target) {
    long transition = zone.nextTransition(now);
    boolean isStandard = zone.isStandardOffset(transition);
    SerializableTimeZoneTime time = toSerializableTimeZoneTime(zone, transition);
    if (isStandard) {
        target.setStandardTime(time);//from  w  w  w.j  a  v a 2 s.  c  o m
    } else {
        target.setDaylightTime(time);
    }
    return transition;
}

From source file:divconq.util.TimeUtil.java

License:Open Source License

/**
 * get the DST start transition for a given year
 * //from www  .j  ava 2s .  c o  m
 * @param zone timezone to use for DST rules
 * @param year the year to use, e.g. 2012
 * @return datetime of the start transition
 */
public static DateTime startDST(DateTimeZone zone, int year) {
    return new DateTime(zone.nextTransition(new DateTime(year, 1, 1, 0, 0, 0, 0, zone).getMillis()));
}

From source file:divconq.util.TimeUtil.java

License:Open Source License

/**
 * get the DST start transition for a given year
 * //from w w w  .ja  v  a2 s .com
 * @param year the year to use, e.g. 2012
 * @return datetime of the start transition
 */
public static DateTime startDST(int year) {
    DateTimeZone zone = DateTimeZone.getDefault();
    return new DateTime(zone.nextTransition(new DateTime(year, 1, 1, 0, 0, 0, 0, zone).getMillis()));
}

From source file:javafxapplication4.JavaFXApplication4.java

@Override
    public void init() throws IOException {

        // Twitter ==============================

        //        String Test = "This is a test message"; 
        //        Twitter twitter = TwitterFactory.getSingleton();
        //        Status status = null;
        //        try {
        //             status = twitter.updateStatus(Test);
        //        } catch (TwitterException ex) {
        //            logger.warn("Unexpected error", e);
        //        }
        //        System.out.println("Successfully updated the status to [" + status.getText() + "].");

        logger.info("Starting application...Bissmillah.");

        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            @Override//from w w  w. j a  v a  2s .  co  m
            public void run() {
                logger.info("Exiting application....");
                ProcessBuilder processBuilder2 = new ProcessBuilder("bash", "-c",
                        "echo \"standby 0000\" | cec-client -d 1 -s \"standby 0\" RPI");
                try {
                    Process process2 = processBuilder2.start();
                } catch (IOException e) {
                    logger.warn("Unexpected error", e);
                }

            }
        }));

        moonPhase = 200;

        // Get Parameter from database==========================================================

        try {
            c = DBConnect.connect();
            SQL = "Select * from settings_parramatta";
            rs = c.createStatement().executeQuery(SQL);
            while (rs.next()) {
                id = rs.getInt("id");
                platform = rs.getString("platform");
                facebook_notification_enable = rs.getBoolean("facebook_notification_enable");
                internet_able = rs.getBoolean("internet_able");
                facebook_Receive = rs.getBoolean("facebook_Receive");
                latitude = rs.getDouble("latitude");
                longitude = rs.getDouble("longitude");
                timezone = rs.getInt("timezone");
                timeZone_ID = rs.getString("timeZone_ID");
                device_name = rs.getString("device_name");
                device_location = rs.getString("device_location");
                pir_sensor = rs.getBoolean("pir_sensor");
                calcMethod = rs.getInt("calcMethod");
                AsrJuristic = rs.getInt("AsrJuristic");
                fb_Access_token = rs.getString("fb_Access_token");
                page_ID = rs.getString("page_ID");
                maghrib_adj = rs.getInt("maghrib_adj");
                max_ar_hadith_len = rs.getInt("max_ar_hadith_len");
                max_en_hadith_len = rs.getInt("max_en_hadith_len");

            }
            c.close();
            System.out.format("Prayertime server running on %s platform\n", platform);
            System.out.format(
                    " Face Book Notification Enabled: %s \n Device is internet able: %s \n Face Book Receive posts: %s \n Facebook page ID: %s \n Latitude: %s \n Longitude: %s \n Time Zone: %s \n Calculation Method: %s  \n Asr Juristic: %s \n",
                    facebook_notification_enable, internet_able, facebook_Receive, page_ID, latitude, longitude,
                    timezone, calcMethod, AsrJuristic);

            System.out.format("This Device Name is:%s at %s \n", device_name, device_location);
            System.out.format("Time Zone ID is:%s \n", timeZone_ID);
        } catch (Exception e) {
            logger.warn("Unexpected error", e);
        }

        if (facebook_notification_enable) {
            System.out.println("facebook notification is enabled");
        }
        if (!facebook_notification_enable) {
            System.out.println("facebook notification is not enabled");
        }
        if (pir_sensor) {
            System.out.println("PIR sensor is enabled");
        }

        // facebook Client ==========================================================================        

        //        FacebookClient facebookClient = new DefaultFacebookClient("CAAJRZCld8U30BAMmPyEHDW2tlR07At1vTmtHEmD8iHtiFWx7D2ZBroCVWQfdhxQ7h2Eohv8ZBPRk85vs2r7XC0K4ibGdFNMTkh0mJU8vui9PEnpvENOSAFD2q7CQ7NJXjlyK1yITmcrvZBAZByy4qV7whiAb2a2SN7s23nYvDgMMG3RhdPIakZBLV39pkksjYZD");
        FacebookClient facebookClient = new DefaultFacebookClient(fb_Access_token);

        // Pushover ==========================================================================        

        //https://github.com/nicatronTg/jPushover\

        //        
        Pushover p = new Pushover("WHq3q48zEFpTqU47Wxygr3VMqoodxc", "skhELgtWRXslAUrYx9yp1s0Os89JTF");
        String temp_msg = device_name + " at " + device_location + " is starting";
        try {
            if (internet_able) {
                p.sendMessage(temp_msg);
            }
        }
        //            catch (IOException e){e.printStackTrace();}
        catch (Exception e) {
            System.err.println("Sending failed. " + e.getMessage());
        }

        //        }
        //        test
        //        try 
        //                                            {
        //                                                //String pageID = page_ID +"/feed?;
        //                                          String pageID = "me/feed";
        //                                                String temporary_msg = " This is an Automated test message";
        //                                                facebookClient.publish(pageID, FacebookType.class, Parameter.with("message", temporary_msg));
        //                                                
        //                                            }
        //                                            catch (FacebookException e){logger.warn("Unexpected error", e);} 

        //Load random Background image on strtup ===============================================        
        images = new ArrayList<String>();
        //change on osx
        if (platform.equals("osx"))
        //        {directory = new File("/Users/ossama/Projects/Pi/javafx/prayertime/background/");} 
        {
            directory = new File("/Users/ossama/Dropbox/Projects/Pi/javafx/prayertime/background");
        }
        //        {directory = new File("/Users/samia/NetBeansProjects/prayertime_files/background/");}
        //change on Pi
        if (platform.equals("pi")) {
            directory = new File("/home/pi/prayertime/Images/");
        }

        files = directory.listFiles();
        for (File f : files) {
            images.add(f.getName());
        }
        System.out.println(images);
        countImages = images.size();
        imageNumber = (int) (Math.random() * countImages);
        rand_Image_Path = directory + "/" + images.get(imageNumber);
        System.out.println(rand_Image_Path);

        if (!platform.equals("osx")) {
            try {
                broadcast_msg = "Prayer Time Server Starting";
                socket1 = new DatagramSocket(null);
                socket1.setBroadcast(true);
                buf1 = broadcast_msg.getBytes();
                group = InetAddress.getByName("255.255.255.255");
                packet1 = new DatagramPacket(buf1, buf1.length, group, 8888);
                socket1.send(packet1);

            } catch (Exception e) {
                System.err.println("Sending failed. " + e.getMessage());
            }
        }

        //        ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "echo \"as\" | cec-client -d 1 -s \"standby 0\" RPI");
        //        Process process = processBuilder.start();
        //            BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
        //            String line = null;
        //            while ((line = br.readLine()) != null) {
        //               System.out.println(line);
        //            } 

        //        ProcessBuilder processBuilder_Athan = new ProcessBuilder("bash", "-c", "mpg123 /home/pi/prayertime/Audio/athan1.mp3");
        //        try {Process process3 = processBuilder_Athan.start();} 
        //            catch (IOException e) {logger.warn("Unexpected error", e);}

        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/PTBLARC.TTF").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/BMajidSh.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/Oldoutsh.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/BJadidBd.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/wlm_carton.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/Arial_Black.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/Arial_Bold.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/timeburner_regular.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/Pinstripe_Limo.ttf").toExternalForm(), 30);
        Font.loadFont(JavaFXApplication4.class.getResource("Fonts/LateefRegOT.ttf").toExternalForm(), 30);

        data = FXCollections.observableArrayList();
        Mainpane = new GridPane();

        footer_Label = new Label();
        like_Label = new Label();
        Moon_Image_Label = new Label();
        Sunrise_Image_Label = new Label();
        Phase_Label = new Label();
        Moon_Date_Label = new Label();
        Sunrise_Date_Label = new Label();
        jamaat_Label_eng = new Label();
        jamaat_Label_ar = new Label();
        athan_Label_eng = new Label();
        athan_Label_ar = new Label();
        friday_Label_eng = new Label();
        friday_Label_ar = new Label();
        sunrise_Label_eng = new Label();
        sunrise_Label_ar = new Label();
        fajr_Label_ar = new Label();
        fajr_Label_eng = new Label();
        zuhr_Label_ar = new Label();
        zuhr_Label_eng = new Label();
        asr_Label_ar = new Label();
        asr_Label_eng = new Label();
        maghrib_Label_ar = new Label();
        maghrib_Label_eng = new Label();
        isha_Label_ar = new Label();
        isha_Label_eng = new Label();
        hadith_Label = new Label();
        ar_moon_hadith_Label_L1 = new Label();
        ar_moon_hadith_Label_L2 = new Label();
        en_moon_hadith_Label_L1 = new Label();
        en_moon_hadith_Label_L2 = new Label();
        announcement_Label = new Label();
        athan_Change_Label_L1 = new Label();
        athan_Change_Label_L2 = new Label();
        hour_Label = new Label();
        minute_Label = new Label();
        second_Label = new Label();
        date_Label = new Label();

        separator_Label = new Label();

        divider1_Label = new Label();
        divider2_Label = new Label();
        fajr_hourLeft = new Label();
        fajr_hourRight = new Label();
        time_Separator1 = new Label();
        fajr_minLeft = new Label();
        fajr_minRight = new Label();
        fajr_jamma_hourLeft = new Label();
        fajr_jamma_hourRight = new Label();
        time_jamma_Separator1 = new Label();
        fajr_jamma_minLeft = new Label();
        fajr_jamma_minRight = new Label();
        sunrise_hourLeft = new Label();
        sunrise_hourRight = new Label();
        time_Separator2 = new Label();
        sunrise_minLeft = new Label();
        sunrise_minRight = new Label();
        zuhr_hourLeft = new Label();
        zuhr_hourRight = new Label();
        time_Separator3 = new Label();
        zuhr_minLeft = new Label();
        zuhr_minRight = new Label();
        zuhr_jamma_hourLeft = new Label();
        zuhr_jamma_hourRight = new Label();
        time_jamma_Separator2 = new Label();
        zuhr_jamma_minLeft = new Label();
        zuhr_jamma_minRight = new Label();
        asr_hourLeft = new Label();
        asr_hourRight = new Label();
        time_Separator4 = new Label();
        asr_minLeft = new Label();
        asr_minRight = new Label();
        asr_jamma_hourLeft = new Label();
        asr_jamma_hourRight = new Label();
        time_jamma_Separator3 = new Label();
        asr_jamma_minLeft = new Label();
        asr_jamma_minRight = new Label();
        maghrib_hourLeft = new Label();
        maghrib_hourRight = new Label();
        time_Separator5 = new Label();
        maghrib_minLeft = new Label();
        maghrib_minRight = new Label();
        maghrib_jamma_hourLeft = new Label();
        maghrib_jamma_hourRight = new Label();
        time_jamma_Separator4 = new Label();
        maghrib_jamma_minLeft = new Label();
        maghrib_jamma_minRight = new Label();
        isha_hourLeft = new Label();
        isha_hourRight = new Label();
        time_Separator6 = new Label();
        isha_minLeft = new Label();
        isha_minRight = new Label();
        isha_jamma_hourLeft = new Label();
        isha_jamma_hourRight = new Label();
        time_jamma_Separator5 = new Label();
        isha_jamma_minLeft = new Label();
        isha_jamma_minRight = new Label();
        friday_hourLeft = new Label();
        friday_hourRight = new Label();
        time_Separator8 = new Label();
        friday_minLeft = new Label();
        friday_minRight = new Label();
        friday2_hourLeft = new Label();
        friday2_hourRight = new Label();
        time_Separator9 = new Label();
        friday2_minLeft = new Label();
        friday2_minRight = new Label();
        facebook_Label = new Label();

        athan_Label_ar.setId("prayer-label-arabic");
        athan_Label_ar.setText("");
        prayertime_pane.setHalignment(athan_Label_ar, HPos.CENTER);
        athan_Label_eng.setId("prayer-label-english");
        athan_Label_eng.setText("Athan");
        prayertime_pane.setHalignment(athan_Label_eng, HPos.CENTER);

        jamaat_Label_ar.setId("prayer-label-arabic");
        jamaat_Label_ar.setText("");
        prayertime_pane.setHalignment(jamaat_Label_ar, HPos.CENTER);
        jamaat_Label_eng.setId("prayer-label-english");
        jamaat_Label_eng.setText("Congregation");
        prayertime_pane.setHalignment(jamaat_Label_eng, HPos.CENTER);

        sunrise_Label_ar.setId("prayer-label-arabic");
        sunrise_Label_ar.setText("");
        prayertime_pane.setHalignment(sunrise_Label_ar, HPos.CENTER);
        sunrise_Label_eng.setId("prayer-label-english");
        sunrise_Label_eng.setText("Sunrise");
        prayertime_pane.setHalignment(sunrise_Label_eng, HPos.CENTER);

        friday_Label_ar.setId("prayer-label-arabic");
        friday_Label_ar.setText("");
        prayertime_pane.setHalignment(friday_Label_ar, HPos.CENTER);
        friday_Label_eng.setId("prayer-label-english");
        friday_Label_eng.setText("Friday");
        prayertime_pane.setHalignment(friday_Label_eng, HPos.CENTER);

        isha_Label_ar.setId("prayer-label-arabic");
        isha_Label_ar.setText("");
        prayertime_pane.setHalignment(isha_Label_ar, HPos.CENTER);
        isha_Label_eng.setId("prayer-label-english");
        isha_Label_eng.setText("Isha");
        prayertime_pane.setHalignment(isha_Label_eng, HPos.CENTER);

        maghrib_Label_ar.setId("prayer-label-arabic");
        maghrib_Label_ar.setText("");
        prayertime_pane.setHalignment(maghrib_Label_ar, HPos.CENTER);
        maghrib_Label_eng.setId("prayer-label-english");
        maghrib_Label_eng.setText("Maghrib");
        prayertime_pane.setHalignment(maghrib_Label_eng, HPos.CENTER);

        asr_Label_ar.setId("prayer-label-arabic");
        asr_Label_ar.setText("");
        GridPane.setHalignment(asr_Label_ar, HPos.CENTER);
        asr_Label_eng.setId("prayer-label-english");
        asr_Label_eng.setText("Asr");
        GridPane.setHalignment(asr_Label_eng, HPos.CENTER);

        zuhr_Label_ar.setId("prayer-label-arabic");
        zuhr_Label_ar.setText("");
        GridPane.setHalignment(zuhr_Label_ar, HPos.CENTER);
        zuhr_Label_eng.setId("prayer-label-english");
        zuhr_Label_eng.setText("Duhr");
        GridPane.setHalignment(zuhr_Label_eng, HPos.CENTER);

        fajr_Label_ar.setId("prayer-label-arabic");
        fajr_Label_ar.setText("?");
        GridPane.setHalignment(fajr_Label_ar, HPos.CENTER);
        fajr_Label_eng.setId("prayer-label-english");
        fajr_Label_eng.setText("Fajr");
        GridPane.setHalignment(fajr_Label_eng, HPos.CENTER);

        Timer prayerCalcTimer = new Timer();
        prayerCalcTimer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                try {

                    //                        Moon m = new Moon();
                    //                        moonPhase = m.illuminatedPercentage();
                    //                        isWaning = m.isWaning();
                    //                        update_moon_image = true;
                    //                        System.out.println("The moon is " + moonPhase + "% full and " + (isWaning ? "waning" : "waxing"));
                    //                    

                    Locale.setDefault(new Locale("en", "AU"));
                    Date now = new Date();
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(now);
                    //                        cal.add(Calendar.DAY_OF_MONTH, -3);
                    //                        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
                    cal.setFirstDayOfWeek(Calendar.MONDAY);
                    dayofweek_int = cal.get(Calendar.DAY_OF_WEEK);
                    String date = new SimpleDateFormat("dd/MM/yyyy").format(new Date());
                    PrayTime getprayertime = new PrayTime();

                    getprayertime.setTimeFormat(0);
                    getprayertime.setCalcMethod(calcMethod);
                    getprayertime.setAsrJuristic(AsrJuristic);
                    getprayertime.setAdjustHighLats(0);
                    int[] offsets = { 0, 0, 0, 0, 0, 0, 0 }; // {Fajr,Sunrise,Dhuhr,Asr,Sunset,Maghrib,Isha}
                    getprayertime.tune(offsets);

                    Date time = cal.getTime();
                    System.out
                            .println(" daylight saving? " + TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time));

                    //                        The following calculate the next daylight saving date
                    DateTimeZone zone = DateTimeZone.forID(timeZone_ID);
                    DateTimeFormatter format = DateTimeFormat.mediumDateTime();

                    //                        long current = System.currentTimeMillis();
                    //                        for (int i=0; i < 1; i++)
                    //                        {
                    //                            long next = zone.nextTransition(current);
                    //                            if (current == next)
                    //                            {
                    //                                break;
                    //                            }
                    //                            System.out.println ("Next Daylight saving Change: " + format.print(next) + " Into DST? " 
                    //                                                + !zone.isStandardOffset(next));
                    //                            current = next;
                    //                        }

                    long next = zone.nextTransition(System.currentTimeMillis());

                    Date nextTransitionDate = new Date(next);
                    Format format1 = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
                    format1.format(nextTransitionDate).toString();
                    Calendar nextTransitionCal = Calendar.getInstance();
                    nextTransitionCal.setTime(nextTransitionDate);
                    //                        Date fajr_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(next);
                    nextTransitionCal.add(Calendar.DAY_OF_MONTH, -7);
                    nextTransitionCal.set(Calendar.HOUR_OF_DAY, 0);
                    System.out.println("Next Daylight saving Check (-7 days): " + nextTransitionCal.getTime());

                    ArrayList<String> prayerTimes = getprayertime.getPrayerTimes(cal, latitude, longitude,
                            timezone);
                    ArrayList<String> prayerNames = getprayertime.getTimeNames();

                    SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");

                    Date fajr_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                            .parse(date + " " + new Time(formatter.parse(prayerTimes.get(0)).getTime()));
                    cal.setTime(fajr_temp);
                    if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                        cal.add(Calendar.MINUTE, 60);
                    }
                    Date fajr = cal.getTime();
                    fajr_cal = Calendar.getInstance();
                    fajr_cal.setTime(fajr);
                    fajr_begins_time = fajr_cal.getTime();
                    System.out.println(" fajr time " + fajr_begins_time);

                    Date sunrise_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                            .parse(date + " " + new Time(formatter.parse(prayerTimes.get(1)).getTime()));
                    cal.setTime(sunrise_temp);
                    if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                        cal.add(Calendar.MINUTE, 60);
                    }
                    Date sunrise = cal.getTime();
                    sunrise_cal = Calendar.getInstance();
                    sunrise_cal.setTime(sunrise);
                    sunrise_time = sunrise_cal.getTime();
                    System.out.println(" sunrise time " + sunrise_time);

                    cal.add(Calendar.MINUTE, 15);
                    Date duha = cal.getTime();
                    //                            System.out.println(duha);
                    duha_cal = Calendar.getInstance();
                    duha_cal.setTime(duha);
                    duha_cal.set(Calendar.MILLISECOND, 0);
                    duha_cal.set(Calendar.SECOND, 0);
                    System.out.println(" Duha alarm time " + duha_cal.getTime());

                    Date zuhr_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                            .parse(date + " " + new Time(formatter.parse(prayerTimes.get(2)).getTime()));
                    cal.setTime(zuhr_temp);
                    if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                        cal.add(Calendar.MINUTE, 60);
                    }
                    Date zuhr = cal.getTime();
                    zuhr_cal = Calendar.getInstance();
                    zuhr_cal.setTime(zuhr);
                    zuhr_begins_time = zuhr_cal.getTime();
                    System.out.println(" Zuhr time " + zuhr_begins_time);

                    Date asr_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                            .parse(date + " " + new Time(formatter.parse(prayerTimes.get(3)).getTime()));
                    cal.setTime(asr_temp);
                    if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                        cal.add(Calendar.MINUTE, 60);
                    }
                    Date asr = cal.getTime();
                    asr_cal = Calendar.getInstance();
                    asr_cal.setTime(asr);
                    asr_begins_time = asr_cal.getTime();
                    System.out.println(" Asr time " + asr_begins_time);

                    Date maghrib_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                            .parse(date + " " + new Time(formatter.parse(prayerTimes.get(5)).getTime()));
                    cal.setTime(maghrib_temp);
                    if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                        cal.add(Calendar.MINUTE, 60);
                    }
                    Date maghrib = cal.getTime();
                    maghrib_cal = Calendar.getInstance();
                    maghrib_cal.setTime(maghrib);
                    maghrib_begins_time = maghrib_cal.getTime();
                    System.out.println(" maghrib time " + maghrib_begins_time);

                    maghrib_plus15_cal = (Calendar) maghrib_cal.clone();
                    maghrib_plus15_cal.add(Calendar.MINUTE, +15);

                    Date isha_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                            .parse(date + " " + new Time(formatter.parse(prayerTimes.get(6)).getTime()));
                    cal.setTime(isha_temp);
                    if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                        cal.add(Calendar.MINUTE, 60);
                    }
                    Date isha = cal.getTime();
                    isha_cal = Calendar.getInstance();
                    isha_cal.setTime(isha);
                    isha_begins_time = isha_cal.getTime();
                    System.out.println(" isha time " + isha_begins_time);

                    //                        set friday prayer here
                    if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                        friday_jamaat = "12:45";
                        friday2_jamaat = "01:20";
                    } else {
                        friday_jamaat = "12:45";
                        friday2_jamaat = "01:20";
                    }

                    update_prayer_labels = true;
                    getFacebook = true;

                    DateTime_now = new DateTime();
                    Calendar_now = Calendar.getInstance();
                    Calendar_now.setTime(new Date());
                    Calendar_now.set(Calendar.MILLISECOND, 0);
                    Calendar_now.set(Calendar.SECOND, 0);
                    Calendar_now.set(Calendar.MINUTE, 0);
                    Calendar_now.set(Calendar.HOUR_OF_DAY, 0);

                    tzSAUDI_ARABIA = DateTimeZone.forID("Asia/Riyadh");
                    dtIslamic = DateTime_now.withChronology(
                            IslamicChronology.getInstance(tzSAUDI_ARABIA, IslamicChronology.LEAP_YEAR_15_BASED));
                    System.out.print("Arabic Date:  ");
                    System.out.print(dtIslamic.getMonthOfYear());
                    System.out.print("/");
                    System.out.println(dtIslamic.getDayOfMonth());

                    if (dtIslamic.getMonthOfYear() == 9) {
                        System.out.println("==========Ramadan Moubarik==========");
                    }

                    //enable athan play time
                    if (dayofweek_int != olddayofweek_int) {
                        Moon m = new Moon();
                        moonPhase = m.illuminatedPercentage();
                        isWaning = m.isWaning();
                        update_moon_image = true;
                        System.out.println(
                                "The moon is " + moonPhase + "% full and " + (isWaning ? "waning" : "waxing"));

                        //                            old_today = Calendar.getInstance();
                        olddayofweek_int = dayofweek_int;
                        //                            System.out.println("current day of the week " + dayofweek_int ); 
                        //                            System.out.println("old day of the week " + olddayofweek_int ); 
                        //                            System.out.println(" cal:  " + cal ); 
                        fajr_athan_enable = true;
                        duha_athan_enable = true;
                        zuhr_athan_enable = true;
                        asr_athan_enable = true;
                        maghrib_athan_enable = true;
                        isha_athan_enable = true;
                        getHadith = true;

                        //==============JAMAA Prayer time 

                        try {
                            c = DBConnect.connect();
                            //                            System.out.println("connected");
                            SQL = "select * from paramatta_prayertimes where DATE(date) = DATE(NOW())";
                            rs = c.createStatement().executeQuery(SQL);
                            while (rs.next()) {
                                id = rs.getInt("id");
                                prayer_date = rs.getDate("date");
                                fajr_jamaat_time = rs.getTime("fajr_jamaat");
                                zuhr_jamaat_time = rs.getTime("zuhr_jamaat");
                                asr_jamaat_time = rs.getTime("asr_jamaat");
                                maghrib_jamaat_time = rs.getTime("maghrib_jamaat");
                                isha_jamaat_time = rs.getTime("isha_jamaat");
                            }
                            c.close();
                            fajr_jamaat = fajr_jamaat_time.toString();
                            zuhr_jamaat = zuhr_jamaat_time.toString();

                            //                                if (TimeZone.getTimeZone( timeZone_ID).inDaylightTime( time )){zuhr_jamaat = "01:15";} 
                            //                                
                            //                                else
                            //                                {
                            //                                    
                            //                                    HolidayManager HOLIDAY = HolidayManager.getInstance(HolidayCalendar.AUSTRALIA);
                            //                                    Set<Holiday> holidays = HOLIDAY.getHolidays(2014, "NSW");
                            //                                    System.out.println(holidays);
                            //                                    System.out.println(dayofweek_int);
                            //                                    if (dayofweek_int == 1 || dayofweek_int == 7)
                            //                                    {
                            //                                        zuhr_jamaat = "12:15";
                            //                                    }
                            //                                    else{zuhr_jamaat = "01:15";}
                            //                                }

                            asr_jamaat = asr_jamaat_time.toString();
                            maghrib_jamaat = maghrib_jamaat_time.toString();
                            isha_jamaat = isha_jamaat_time.toString();
                            // print the results
                            System.out.format("%s,%s,%s,%s,%s,%s,%s \n", id, prayer_date, fajr_jamaat, zuhr_jamaat,
                                    asr_jamaat, maghrib_jamaat, isha_jamaat);

                        } catch (Exception e) {
                            logger.warn("Unexpected error", e);
                        }

                        //==============Prayer notification - setup notification timming                            
                        Date fajr_jamaat_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                                .parse(date + " " + fajr_jamaat);
                        cal.setTime(fajr_jamaat_temp);
                        cal.add(Calendar.MINUTE, 5);
                        Date fajr_jamaat = cal.getTime();
                        fajr_jamaat_update_cal = Calendar.getInstance();
                        fajr_jamaat_update_cal.setTime(fajr_jamaat);
                        fajr_jamaat_update_cal.set(Calendar.MILLISECOND, 0);
                        fajr_jamaat_update_cal.set(Calendar.SECOND, 0);

                        fajr_jamaat_cal = (Calendar) fajr_jamaat_update_cal.clone();
                        fajr_jamaat_cal.add(Calendar.MINUTE, -5);
                        //                            System.out.println("fajr Jamaat update scheduled at:" + fajr_jamaat_update_cal.getTime());

                        Date zuhr_jamaat_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                                .parse(date + " " + zuhr_jamaat);
                        cal.setTime(zuhr_jamaat_temp);
                        Date zuhr_jamaat_Date = cal.getTime();
                        zuhr_jamaat_cal = Calendar.getInstance();
                        zuhr_jamaat_cal.setTime(zuhr_jamaat_Date);
                        zuhr_jamaat_cal.set(Calendar.MILLISECOND, 0);
                        zuhr_jamaat_cal.set(Calendar.SECOND, 0);

                        zuhr_plus15_cal = (Calendar) zuhr_jamaat_cal.clone();
                        zuhr_plus15_cal.add(Calendar.MINUTE, +15);

                        Date asr_jamaat_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                                .parse(date + " " + asr_jamaat);
                        cal.setTime(asr_jamaat_temp);
                        cal.add(Calendar.MINUTE, 5);
                        Date asr_jamaat = cal.getTime();
                        asr_jamaat_update_cal = Calendar.getInstance();
                        asr_jamaat_update_cal.setTime(asr_jamaat);
                        asr_jamaat_update_cal.set(Calendar.MILLISECOND, 0);
                        asr_jamaat_update_cal.set(Calendar.SECOND, 0);
                        //                            System.out.println("asr Jamaat update scheduled at:" + asr_jamaat_update_cal.getTime());
                        asr_jamaat_cal = (Calendar) asr_jamaat_update_cal.clone();
                        asr_jamaat_cal.add(Calendar.MINUTE, -5);

                        //                            maghrib_jamaat_cal = (Calendar)maghrib_cal.clone();
                        //                            maghrib_jamaat_cal.add(Calendar.MINUTE, maghrib_adj);

                        Date maghrib_jamaat_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                                .parse(date + " " + maghrib_jamaat);
                        cal.setTime(maghrib_jamaat_temp);
                        cal.add(Calendar.MINUTE, 5);
                        Date maghrib_jamaat = cal.getTime();
                        maghrib_jamaat_update_cal = Calendar.getInstance();
                        maghrib_jamaat_update_cal.setTime(maghrib_jamaat);
                        maghrib_jamaat_update_cal.set(Calendar.MILLISECOND, 0);
                        maghrib_jamaat_update_cal.set(Calendar.SECOND, 0);
                        //                            System.out.println("maghrib Jamaat update scheduled at:" + maghrib_jamaat_update_cal.getTime());
                        maghrib_jamaat_cal = (Calendar) maghrib_jamaat_update_cal.clone();
                        maghrib_jamaat_cal.add(Calendar.MINUTE, -5);

                        Date isha_jamaat_temp = new SimpleDateFormat("dd/MM/yyyy HH:mm")
                                .parse(date + " " + isha_jamaat);
                        cal.setTime(isha_jamaat_temp);
                        cal.add(Calendar.MINUTE, 5);
                        Date isha_jamaat = cal.getTime();
                        isha_jamaat_update_cal = Calendar.getInstance();
                        isha_jamaat_update_cal.setTime(isha_jamaat);
                        isha_jamaat_update_cal.set(Calendar.MILLISECOND, 0);
                        isha_jamaat_update_cal.set(Calendar.SECOND, 0);
                        //                            System.out.println("Isha Jamaat update scheduled at:" + isha_jamaat_update_cal.getTime());
                        isha_jamaat_cal = (Calendar) isha_jamaat_update_cal.clone();
                        isha_jamaat_cal.add(Calendar.MINUTE, -5);

                        //==============Prayer time change notification logic + 5days
                        // check excel file in documentation folder for a flow chart                            

                        // check if a notification has already been sent, to avoid flooding users with notifications, i.e during a system restart
                        ar_notification_Msg_Lines = null;

                        try {
                            c = DBConnect.connect();
                            SQL = "Select * from notification where id = (select max(id) from notification)";
                            rs = c.createStatement().executeQuery(SQL);
                            while (rs.next()) {
                                id = rs.getInt("id");
                                notification_Date = rs.getDate("notification_Date");
                                en_message_String = rs.getString("en_message_String");
                                ar_message_String = rs.getString("ar_message_String");
                                notification_Sent = rs.getBoolean("notification_Sent");
                            }
                            c.close();
                            System.out.format("%s,%s,%s,%s \n", notification_Date, en_message_String,
                                    ar_message_String, notification_Sent);
                        } catch (Exception e) {
                            logger.warn("Unexpected error", e);
                        }
                        notification_Date_cal = Calendar.getInstance();
                        notification_Date_cal.setTime(notification_Date);
                        notification_Date_cal.set(Calendar.MILLISECOND, 0);
                        notification_Date_cal.set(Calendar.SECOND, 0);

                        //                            System.out.println("notification_Date_cal:" + notification_Date_cal.getTime());
                        //                            System.out.println("Calendar_now:         " + Calendar_now.getTime());

                        if (Calendar_now.compareTo(notification_Date_cal) < 0) //&& !notification_Sent
                        {
                            en_notification_Msg = en_message_String;
                            ar_notification_Msg = ar_message_String;
                            ar_notification_Msg_Lines = ar_notification_Msg.split("\\r?\\n");
                            en_notification_Msg_Lines = en_notification_Msg.split("\\r?\\n");
                            athan_Change_Label_visible = true;
                            getFacebook = false;
                        }

                        if (Calendar_now.compareTo(notification_Date_cal) >= 0) //&& !notification_Sent
                        {
                            athan_Change_Label_visible = false;
                            try {
                                c = DBConnect.connect();
                                SQL = "select * from paramatta_prayertimes where DATE(date) = DATE(NOW() ) + INTERVAL 2 DAY ";
                                rs = c.createStatement().executeQuery(SQL);
                                while (rs.next()) {
                                    future_prayer_date = rs.getDate("date");
                                    future_fajr_jamaat_time = rs.getTime("fajr_jamaat");
                                    future_asr_jamaat_time = rs.getTime("asr_jamaat");
                                    future_maghrib_jamaat_time = rs.getTime("maghrib_jamaat");
                                    future_isha_jamaat_time = rs.getTime("isha_jamaat");
                                }
                                c.close();

                                // print the results
                                System.out.format("%s,%s,%s,%s,%s \n", future_prayer_date, future_fajr_jamaat_time,
                                        future_asr_jamaat_time, future_maghrib_jamaat_time,
                                        future_isha_jamaat_time);

                                if (!fajr_jamaat_time.equals(future_fajr_jamaat_time)) {

                                    System.out.println("Fajr Prayer Time Difference");
                                    fajr_jamma_time_change = true;
                                    notification = true;

                                    java.sql.Date sqlDate = new java.sql.Date(future_prayer_date.getTime());
                                    c = DBConnect.connect();
                                    PreparedStatement ps = c.prepareStatement(
                                            "INSERT INTO prayertime.notification (notification_Date) VALUE (?)");
                                    ps.setDate(1, sqlDate);
                                    ps.executeUpdate();
                                    c.close();
                                }

                                if (!asr_jamaat_time.equals(future_asr_jamaat_time)) {
                                    System.out.println("asr Prayer Time Difference");
                                    asr_jamma_time_change = true;
                                    if (!notification) {
                                        java.sql.Date sqlDate = new java.sql.Date(future_prayer_date.getTime());
                                        c = DBConnect.connect();
                                        PreparedStatement ps = c.prepareStatement(
                                                "INSERT INTO prayertime.notification (notification_Date) VALUE (?)");
                                        ps.setDate(1, sqlDate);
                                        ps.executeUpdate();
                                        c.close();
                                    }
                                    notification = true;
                                }

                                if (!maghrib_jamaat_time.equals(future_maghrib_jamaat_time)) {
                                    System.out.println("maghrib Prayer Time Difference");
                                    maghrib_jamma_time_change = true;
                                    if (!notification) {
                                        java.sql.Date sqlDate = new java.sql.Date(future_prayer_date.getTime());
                                        c = DBConnect.connect();
                                        PreparedStatement ps = c.prepareStatement(
                                                "INSERT INTO prayertime.notification (notification_Date) VALUE (?)");
                                        ps.setDate(1, sqlDate);
                                        ps.executeUpdate();
                                        c.close();
                                    }
                                    notification = true;
                                }

                                if (!isha_jamaat_time.equals(future_isha_jamaat_time)) {
                                    System.out.println("isha Prayer Time Difference");
                                    isha_jamma_time_change = true;
                                    if (!notification) {
                                        java.sql.Date sqlDate = new java.sql.Date(future_prayer_date.getTime());
                                        c = DBConnect.connect();
                                        PreparedStatement ps = c.prepareStatement(
                                                "INSERT INTO prayertime.notification (notification_Date) VALUE (?)");
                                        ps.setDate(1, sqlDate);
                                        ps.executeUpdate();
                                        c.close();
                                    }
                                    notification = true;
                                }
                            } catch (Exception e) {
                                logger.warn("Unexpected error", e);
                            }

                        }

                        fullMoon = MoonPhaseFinder.findFullMoonFollowing(Calendar.getInstance());
                        newMoon = MoonPhaseFinder.findNewMoonFollowing(Calendar.getInstance());
                        System.out.println("The moon is full on " + fullMoon);
                        System.out.println("The moon is new on " + newMoon);
                        if (newMoon.before(fullMoon)) {
                            System.out.println("New moon is before full moon");
                        } else {
                            System.out.println("Full moon is before new moon");
                        }
                        pir_disactive_startup = false;

                        // ======= Notification for ashura and full moon 5 days earlier, 2 days before fasting period

                        //TODO Use moonsighting.info to get moon sighting observations

                        Days d = Days.daysBetween(new DateMidnight(DateTime_now), new DateMidnight(fullMoon));
                        int days_Between_Now_Fullmoon = d.getDays();
                        System.out.format("Days left to full moon: %s\n", days_Between_Now_Fullmoon);

                        fullMoon_plus1 = (Date) fullMoon.clone();
                        Date ashura = (Date) fullMoon.clone();
                        DateTimeComparator comparator = DateTimeComparator.getTimeOnlyInstance();
                        //                                System.out.println(days_Between_Now_Fullmoon);

                        if (dtIslamic.getMonthOfYear() == 1 && days_Between_Now_Fullmoon == 9
                                && comparator.compare(fullMoon, maghrib_cal) > 0) {
                            //hide hadith label boolean
                            getHadith = false;
                            //                                getFacebook = false;
                            hadith_Label_visible = false;
                            //show moon notification label boolean
                            moon_hadith_Label_visible = true;

                            // 15 - 9 = 6 Ashura = fullMoon_plus1.setTime(fullMoon.getTime() - 4 * 24 * 60 * 60 * 1000);

                            try {
                                c = DBConnect.connect();

                                SQL = "select hadith, translated_hadith from hadith WHERE (translated_hadith LIKE '%Ashura%') and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                                rs = c.createStatement().executeQuery(SQL);
                                while (rs.next()) {
                                    hadith = rs.getString("hadith");
                                    translated_hadith = rs.getString("translated_hadith");

                                }
                                c.close();
                                System.out.println("Ashura arabic hadith length" + hadith.length());
                                System.out.println("Ashura english hadith length" + translated_hadith.length());

                            } catch (Exception e) {
                                logger.warn("Unexpected error", e);
                            }
                            ashura.setTime(fullMoon.getTime() - 4 * 24 * 60 * 60 * 1000);
                            String Ashura_dow_ar = new SimpleDateFormat("' 'EEEE' '", new Locale("ar"))
                                    .format(ashura);
                            String Ashura_dow_en = new SimpleDateFormat("EEEE").format(ashura);
                            String temp_ar_text1 = "       ";
                            String temp_ar_text2 = "     .    ?   ";
                            ar_moon_notification = temp_ar_text1 + Ashura_dow_ar + temp_ar_text2;
                            en_moon_notification = "A reminder that the 10th of Muharram \"Ashura\" will fall on "
                                    + Ashura_dow_en
                                    + ", It is recommended to fast either the 9th & 10th of Muharram or the 10th & 11th ";
                            facebook_moon_notification_Msg = ar_moon_notification + "\n\n" + en_moon_notification;
                            if (facebook_notification_enable) {
                                try {
                                    //String pageID = page_ID +"/feed?;
                                    String pageID = "me/feed";
                                    facebookClient.publish(pageID, FacebookType.class,
                                            Parameter.with("message", facebook_moon_notification_Msg));
                                    System.out.println("Full Moon Notification Sent to Facebook:");
                                    System.out.println(facebook_moon_notification_Msg);
                                } catch (FacebookException e) {
                                    logger.warn("Unexpected error", e);
                                }

                            }

                        }

                        else if (dtIslamic.getMonthOfYear() == 1 && days_Between_Now_Fullmoon == 9) {
                            //hide hadith label boolean
                            getHadith = false;
                            //                                getFacebook = false;
                            hadith_Label_visible = false;
                            //show moon notification label boolean
                            moon_hadith_Label_visible = true;

                            // 15 - 9 = 6 Ashura = fullMoon_plus1.setTime(fullMoon.getTime() - 5 * 24 * 60 * 60 * 1000);

                        }

                        if (dtIslamic.getMonthOfYear() != 9 && days_Between_Now_Fullmoon <= 5
                                && days_Between_Now_Fullmoon >= 2) {
                            //hide hadith label boolean
                            getHadith = false;
                            //                                getFacebook = false;
                            hadith_Label_visible = false;
                            //show moon notification label boolean
                            moon_hadith_Label_visible = true;
                            try {
                                c = DBConnect.connect();
                                SQL = "select hadith, translated_hadith from hadith WHERE day = '15' ORDER BY RAND( ) LIMIT 1";
                                rs = c.createStatement().executeQuery(SQL);
                                while (rs.next()) {
                                    ar_full_moon_hadith = rs.getString("hadith");
                                    en_full_moon_hadith = rs.getString("translated_hadith");
                                }
                                c.close();
                                System.out.format("Full Moon arabic hadith: %s\n", ar_full_moon_hadith);
                                System.out.format("Full Moon english hadith: %s\n", en_full_moon_hadith);
                            } catch (Exception e) {
                                logger.warn("Unexpected error", e);
                            }

                            if (days_Between_Now_Fullmoon == 5 && comparator.compare(fullMoon, maghrib_cal) < 0) {
                                fullMoon_plus1.setTime(fullMoon.getTime() - 2 * 24 * 60 * 60 * 1000);
                                String FullMoon_dow_ar = new SimpleDateFormat("' 'EEEE' '", new Locale("ar"))
                                        .format(fullMoon_plus1);
                                String FullMoon_dow_en = new SimpleDateFormat("EEEE").format(fullMoon_plus1);
                                String temp_ar_text1 = "  ? ?         ";
                                String temp_ar_text2 = "    ?   .            ";
                                ar_moon_notification = temp_ar_text1 + FullMoon_dow_ar + temp_ar_text2;
                                en_moon_notification = "We would like to remind our dear brothers & sisters that this month's \"White days\" will start this "
                                        + FullMoon_dow_en
                                        + ", it is recommended to fast these days. Pls note that this is based on calendar calculations not moon sighting observations";
                                facebook_moon_notification_Msg = ar_moon_notification + "\n\n"
                                        + en_moon_notification;
                                //                                    try
                                //                                    {
                                //                                        //String pageID = page_ID +"/feed?;
                                //                                       String pageID = "me/feed";
                                //                                        facebookClient.publish(pageID, FacebookType.class, Parameter.with("message", facebook_moon_notification_Msg));
                                //                                    }
                                //                                    catch (FacebookException e){logger.warn("Unexpected error", e);}                           
                                //                                    System.out.println("Full Moon Notification Sent to Facebook:" );
                                //                                    System.out.println(facebook_moon_notification_Msg);
                            }

                            else if (days_Between_Now_Fullmoon == 5) {
                                if (comparator.compare(fullMoon, maghrib_cal) > 0) {
                                    fullMoon_plus1.setTime(fullMoon.getTime() - 1 * 24 * 60 * 60 * 1000);
                                    String FullMoon_dow_ar = new SimpleDateFormat("' 'EEEE' '", new Locale("ar"))
                                            .format(fullMoon_plus1);
                                    String FullMoon_dow_en = new SimpleDateFormat("EEEE").format(fullMoon_plus1);
                                    String temp_ar_text1 = "  ? ?         ";
                                    String temp_ar_text2 = "   ?   .            ";
                                    ar_moon_notification = temp_ar_text1 + FullMoon_dow_ar + temp_ar_text2;
                                    en_moon_notification = "We would like to remind our dear brothers & sisters that this month's \"White days\" will start this "
                                            + FullMoon_dow_en
                                            + ", it is recommended to fast these days. Pls note that this is based on calendar calculations not moon sighting observations";
                                    facebook_moon_notification_Msg = ar_moon_notification + "\n\n"
                                            + en_moon_notification;
                                    if (facebook_notification_enable) {
                                        try {
                                            //String pageID = page_ID +"/feed?;
                                            String pageID = "me/feed";
                                            facebookClient.publish(pageID, FacebookType.class,
                                                    Parameter.with("message", facebook_moon_notification_Msg));
                                            System.out.println("Full Moon Notification Sent to Facebook:");
                                            System.out.println(facebook_moon_notification_Msg);
                                        } catch (FacebookException e) {
                                            logger.warn("Unexpected error", e);
                                        }

                                    }

                                }

                                else {
                                    fullMoon_plus1.setTime(fullMoon.getTime() - 2 * 24 * 60 * 60 * 1000);
                                    String FullMoon_dow_ar = new SimpleDateFormat("' 'EEEE' '", new Locale("ar"))
                                            .format(fullMoon_plus1);
                                    String FullMoon_dow_en = new SimpleDateFormat("EEEE").format(fullMoon_plus1);
                                    String temp_ar_text1 = "  ? ?         ";
                                    String temp_ar_text2 = "   ?   .            ";
                                    ar_moon_notification = temp_ar_text1 + FullMoon_dow_ar + temp_ar_text2;
                                    en_moon_notification = "We would like to remind our dear brothers & sisters that this month's \"White days\" will start this "
                                            + FullMoon_dow_en
                                            + ", it is recommended to fast these days. Pls note that this is based on calendar calculations not moon sighting observations";
                                    facebook_moon_notification_Msg = ar_moon_notification + "\n\n"
                                            + en_moon_notification;
                                    System.out.println("Full Moon Notification:");
                                    System.out.println(facebook_moon_notification_Msg);
                                }
                            }

                            else if (days_Between_Now_Fullmoon == 3) {
                                if (comparator.compare(fullMoon, maghrib_cal) > 0) {
                                    fullMoon_plus1.setTime(fullMoon.getTime() - 1 * 24 * 60 * 60 * 1000);
                                    String FullMoon_dow_ar = new SimpleDateFormat("' 'EEEE' '", new Locale("ar"))
                                            .format(fullMoon_plus1);
                                    String FullMoon_dow_en = new SimpleDateFormat("EEEE").format(fullMoon_plus1);
                                    String temp_ar_text1 = "  ? ?         ";
                                    String temp_ar_text2 = "   ?   .            ";
                                    ar_moon_notification = temp_ar_text1 + FullMoon_dow_ar + temp_ar_text2;
                                    en_moon_notification = "We would like to remind our dear brothers & sisters that this month's \"White days\" will start this "
                                            + FullMoon_dow_en
                                            + ", it is recommended to fast these days. Pls note that this is based on calendar calculations not moon sighting observations";
                                    facebook_moon_notification_Msg = ar_moon_notification + "\n\n"
                                            + en_moon_notification;
                                }

                                else {
                                    String temp_ar_text1 = "  ? ?          ";
                                    String temp_ar_text2 = "   ?   .            ";
                                    ar_moon_notification = temp_ar_text1 + temp_ar_text2;
                                    en_moon_notification = "We would like to remind our dear brothers & sisters that this month's \"White days\" will start tomorrow, it is recommended to fast these days. Pls note that this is based on calendar calculations not moon sighting observations";
                                    facebook_moon_notification_Msg = ar_moon_notification + "\n\n"
                                            + en_moon_notification;
                                    if (facebook_notification_enable) {
                                        try {
                                            //String pageID = page_ID +"/feed?;
                                            String pageID = "me/feed";
                                            facebookClient.publish(pageID, FacebookType.class,
                                                    Parameter.with("message", facebook_moon_notification_Msg));
                                            System.out.println("Full Moon Notification Sent to Facebook:");
                                            System.out.println(facebook_moon_notification_Msg);
                                        } catch (FacebookException e) {
                                            logger.warn("Unexpected error", e);
                                        }
                                    }

                                }
                            }

                            else if (days_Between_Now_Fullmoon == 2
                                    && comparator.compare(fullMoon, maghrib_cal) > 0) {
                                String temp_ar_text1 = "  ? ?          ";
                                String temp_ar_text2 = "   ?   .            ";
                                ar_moon_notification = temp_ar_text1 + temp_ar_text2;
                                System.out.println(ar_moon_notification);
                                en_moon_notification = "We would like to remind our dear brothers & sisters that this month's \"White days\" will start tomorrow, it is recommended to fast these days. Pls note that this is based on calendar calculations not moon sighting observations";
                                System.out.println(en_moon_notification);
                                facebook_moon_notification_Msg = ar_moon_notification + "\n\n"
                                        + en_moon_notification;
                                if (facebook_notification_enable) {
                                    try {
                                        //String pageID = page_ID +"/feed?;
                                        String pageID = "me/feed";
                                        facebookClient.publish(pageID, FacebookType.class,
                                                Parameter.with("message", facebook_moon_notification_Msg));
                                        System.out.println("Full Moon Notification Sent to Facebook:");
                                        System.out.println(facebook_moon_notification_Msg);
                                    } catch (FacebookException e) {
                                        logger.warn("Unexpected error", e);
                                    }
                                }

                            }

                            else {
                                getHadith = true;
                                moon_hadith_Label_visible = false;
                                hadith_Label_visible = true;
                                System.out.println("moon else");
                            }
                        }

                        else if (days_Between_Now_Fullmoon > 5 || days_Between_Now_Fullmoon < 2
                                || dtIslamic.getMonthOfYear() != 1) {
                            getHadith = true;
                            //                                getFacebook = true;
                            //hide moon notification label boolean
                            moon_hadith_Label_visible = false;
                            //show hadith label boolean
                            hadith_Label_visible = true;
                        }

                    }

                    //TODO Prayer time change notification/////////////////////put this in a thread, so error does not stop code further down ========================================================
                    // creates message to send to facebook
                    // creates labels for notification

                    if (notification) {
                        ar_notification_Msg_Lines = null;
                        //                            Calendar_now.setTime(future_prayer_date);

                        Calendar prayertime_Change_Due_Date = null;
                        prayertime_Change_Due_Date = Calendar.getInstance();
                        prayertime_Change_Due_Date.setTime(future_prayer_date);

                        System.out.println("Calendar_now: " + Calendar_now.getTime());
                        int day = prayertime_Change_Due_Date.get(Calendar.DAY_OF_MONTH);
                        String dayStr = day + suffixes[day];
                        String en_notification_date = new SimpleDateFormat("EEEE").format(future_prayer_date);
                        String en_notification_date1 = new SimpleDateFormat("' of ' MMMM")
                                .format(future_prayer_date);

                        String ar_notification_date = new SimpleDateFormat(" EEEE d MMMM ", new Locale("ar"))
                                .format(future_prayer_date);
                        labeconv = "   " + ar_notification_date
                                + "     \n";
                        StringBuilder builder = new StringBuilder();
                        for (int i = 0; i < labeconv.length(); i++) {
                            if (Character.isDigit(labeconv.charAt(i))) {
                                builder.append(arabicChars[(int) (labeconv.charAt(i)) - 48]);
                            } else {
                                builder.append(labeconv.charAt(i));
                            }
                        }
                        ar_notification_Msg = builder.toString();

                        en_notification_Msg = "Starting from " + en_notification_date + " the " + dayStr
                                + en_notification_date1 + " the following prayer time(s) will change\n";

                        SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm");
                        //                            en_notification_Msg = "Time change\nTime saving will be in effect as of *Sunday, November 03, 2013*\nAll prayer times will move back by one hour.\nJummah prayer will be at 1:00 PM";
                        if (fajr_jamma_time_change) {
                            String future_fajr_jamaat_time_mod = DATE_FORMAT.format(future_fajr_jamaat_time);
                            //                                Date future_fajr_jamaat_time_mod = new SimpleDateFormat("HH:mm").parse("Fajr time: " + future_fajr_jamaat_time);
                            en_notification_Msg = en_notification_Msg + "Fajr: " + future_fajr_jamaat_time_mod
                                    + "    ";
                            ar_notification_Msg = ar_notification_Msg + "?: " + future_fajr_jamaat_time_mod
                                    + "    ";
                            fajr_jamma_time_change = false;
                        }

                        if (Calendar_now.compareTo(nextTransitionCal) == 0) {
                            if (TimeZone.getTimeZone(timeZone_ID).inDaylightTime(time)) {
                                future_zuhr_jamaat_time = "12:15";
                            } else {
                                future_zuhr_jamaat_time = "13:15";
                            }
                            en_notification_Msg = en_notification_Msg + "Duhr & Friday: " + future_zuhr_jamaat_time
                                    + "    ";
                            ar_notification_Msg = ar_notification_Msg + "  : "
                                    + future_zuhr_jamaat_time + "    ";
                        }

                        if (asr_jamma_time_change) {
                            String future_asr_jamaat_time_mod = DATE_FORMAT.format(future_asr_jamaat_time);
                            //                                Date future_fajr_jamaat_time_mod = new SimpleDateFormat("HH:mm").parse("Fajr time: " + future_fajr_jamaat_time);
                            en_notification_Msg = en_notification_Msg + "Asr: " + future_asr_jamaat_time_mod
                                    + "    ";
                            ar_notification_Msg = ar_notification_Msg + ": " + future_asr_jamaat_time_mod
                                    + "    ";
                            asr_jamma_time_change = false;
                        }

                        if (maghrib_jamma_time_change) {
                            String future_maghrib_jamaat_time_mod = DATE_FORMAT.format(future_maghrib_jamaat_time);
                            //                                Date future_maghrib_jamaat_time_mod = new SimpleDateFormat("HH:mm").parse("Fajr time: " + future_maghrib_jamaat_time);
                            en_notification_Msg = en_notification_Msg + "Maghrib: "
                                    + future_maghrib_jamaat_time_mod;
                            ar_notification_Msg = ar_notification_Msg + ": "
                                    + future_maghrib_jamaat_time_mod;
                            maghrib_jamma_time_change = false;
                        }

                        if (isha_jamma_time_change) {
                            String future_isha_jamaat_time_mod = DATE_FORMAT.format(future_isha_jamaat_time);
                            //                                Date future_fajr_jamaat_time_mod = new SimpleDateFormat("HH:mm").parse("Fajr time: " + future_fajr_jamaat_time);
                            en_notification_Msg = en_notification_Msg + "Isha: " + future_isha_jamaat_time_mod;
                            ar_notification_Msg = ar_notification_Msg + ": "
                                    + future_isha_jamaat_time_mod;
                            isha_jamma_time_change = false;
                        }
                        try {
                            c = DBConnect.connect();
                            Statement st = (Statement) c.createStatement();
                            st.executeUpdate("UPDATE prayertime.notification SET en_message_String='"
                                    + en_notification_Msg + "' ORDER BY id DESC LIMIT 1");
                            st.executeUpdate("UPDATE prayertime.notification SET ar_message_String= '"
                                    + ar_notification_Msg + "' ORDER BY id DESC LIMIT 1");
                            c.close();
                            ar_notification_Msg_Lines = ar_notification_Msg.split("\\r?\\n");
                            en_notification_Msg_Lines = en_notification_Msg.split("\\r?\\n");
                        } catch (Exception e) {
                            logger.warn("Unexpected error", e);
                        }

                        notification = false;
                        athan_Change_Label_visible = true;
                        getFacebook = false;

                        notification_Msg = ar_notification_Msg_Lines[0] + "\n" + ar_notification_Msg_Lines[1]
                                + "\n\n" + en_notification_Msg_Lines[0] + "\n" + en_notification_Msg_Lines[1];
                        System.out.println(notification_Msg);

                        //                            Twitter twitter = TwitterFactory.getSingleton();
                        //                            Status status = null;
                        //                            try {status = twitter.updateStatus(notification_Msg);} 
                        //                            catch (TwitterException ex) {logger.warn("Unexpected error", e);}
                        //                            System.out.println("Successfully updated the status to [" + status.getText() + "].");
                        System.out.println("Notification Sent to Facebook");
                        if (facebook_notification_enable) {
                            try {
                                //String pageID = page_ID +"/feed?;
                                String pageID = "me/feed";
                                facebookClient.publish(pageID, FacebookType.class,
                                        Parameter.with("message", notification_Msg));
                            } catch (Exception e) {
                                logger.warn("Unexpected error", e);
                            }
                        }

                        try {
                            p.sendMessage(en_notification_Msg);
                        } catch (Exception e) {
                            {
                                logger.warn("Unexpected error", e);
                            }
                        }
                    }

                    if (isStarting) {
                        isStarting = false;
                    }

                    // Get Facebook Latest Post =================================================================================
                    if (getFacebook && facebook_Receive && internet_able) {
                        getFacebook = false;
                        facebook_Text_Post = false;
                        facebook_Picture_Post = false;
                        facebook_post = "";
                        //                            facebook_Post_Url = "";
                        facebook_Fan_Count = "";
                        Calendar facebook_created_time_calendar = null;
                        Calendar facebook_photo_created_time_calendar = null;
                        Calendar facebook_check_post_date = Calendar.getInstance();
                        facebook_check_post_date.add(Calendar.DAY_OF_MONTH, -6);
                        long facebook_check_post_Unix_Time = facebook_check_post_date.getTimeInMillis() / 1000;
                        //                            out.println(facebook_check_post_Unix_Time);
                        String query = "SELECT message,timeline_visibility, created_time   FROM stream WHERE source_id = "
                                + page_ID
                                + " AND message AND strlen(attachment.fb_object_type) < 1 AND type != 56 AND type = 46  AND strpos(message, \"prayer time(s)\") < 0 AND strpos(message, \"White days\") < 0 AND strpos(message, \"Hadith of the Day:\") < 0 AND created_time > "
                                + facebook_check_post_Unix_Time + " LIMIT 1";
                        //                            String query = "{\"messages\":\"SELECT message,timeline_visibility, created_time   FROM stream WHERE source_id = " + page_ID + " AND message AND strlen(attachment.fb_object_type) < 1 AND type != 56 AND type = 46  AND strpos(message, \'prayer time(s)\') < 0 AND strpos(message, \'White days\') < 0 AND strpos(message, \'Hadith of the Day:\') < 0 AND created_time > " + facebook_check_post_Unix_Time + " LIMIT 1\" ,  \"count\": \"SELECT fan_count FROM page WHERE page_id = " + page_ID + "\"}";
                        //                            out.println(query);
                        try {
                            List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class);

                            if (!queryResults.isEmpty()) {
                                JsonObject facebookPost_J = queryResults.get(0);
                                facebook_post = facebookPost_J.getString("message");

                                //                                    facebook_post = "Asalamualaikum,\n" + "We have been given a large printer/copier for administration at Daar Ibn\n Abbas. Is there any brothers available to pick it up from Lakemba? ";

                                String[] lines = facebook_post.split("\r\n|\r|\n");

                                if (null != facebook_post && !"".equals(facebook_post)) {
                                    if (facebook_post.contains("\n\n")) {
                                        out.println("'/n/n' detected");
                                        facebook_post = facebook_post.replace("\n\n", "\n");
                                        out.println(facebook_post);
                                    }
                                    facebook_created_time_calendar = Calendar
                                            .getInstance(TimeZone.getTimeZone(timeZone_ID));
                                    facebook_created_time_calendar
                                            .setTimeInMillis(queryResults.get(0).getLong("created_time") * 1000);
                                    //                                        out.print("Comment posted on:"); out.println(facebook_created_time_calendar.getTime());
                                    if (facebook_post.contains("tonight") || facebook_post.contains("today") && Days
                                            .daysBetween(new DateMidnight(DateTime_now),
                                                    new DateMidnight(facebook_created_time_calendar))
                                            .getDays() != 0) {
                                        out.println(
                                                "Facebook post contains either  the word 'today' or 'tonight' and has not been posted today");
                                        facebook_post = "";
                                        facebook_Label_visible = false;
                                    }

                                    else if (facebook_post.length() > 390 || lines.length > 6) {
                                        System.out.println("Facebook post is too large, it will not be posted");
                                        System.out.println("Facebook lines: " + lines.length);
                                        System.out.println("Facebook string length: " + facebook_post.length());
                                        facebook_post = "";
                                        facebook_Label_visible = false;
                                    }

                                    else {
                                        facebook_Text_Post = true;
                                        facebook_Label_visible = true;
                                        facebook_Label_visible_set_once = true;
                                    }
                                }
                            } else {
                                out.println("Facebook post is empty");
                            }
                        } catch (FacebookException e) {
                            logger.warn("Unexpected error", e);
                        } catch (Exception e) {
                            logger.warn("Unexpected error", e);
                        }

                        query = "SELECT fan_count FROM page WHERE page_id = " + page_ID;
                        try {
                            List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class);
                            facebook_Fan_Count = queryResults.get(0).getString("fan_count");
                            out.println("Page Likes: " + facebook_Fan_Count);

                        } catch (FacebookException e) {
                            logger.warn("Unexpected error", e);
                        } catch (Exception e) {
                            logger.warn("Unexpected error", e);
                        }

                        query = "SELECT attachment.media.photo.images.src, created_time   FROM stream WHERE source_id = "
                                + page_ID + "  AND type = 247 AND created_time > " + facebook_check_post_Unix_Time
                                + " LIMIT 1";
                        try {
                            List<JsonObject> queryResults = facebookClient.executeFqlQuery(query, JsonObject.class);
                            if (!queryResults.isEmpty()) {
                                if (null != facebook_Post_Url && !"".equals(facebook_Post_Url)) {
                                    old_facebook_Post_Url = new String(facebook_Post_Url);
                                }
                                //                                    out.println(old_facebook_Post_Url);

                                try {
                                    facebook_Post_Url = queryResults.get(0).getJsonObject("attachment")
                                            .getJsonArray("media").getJsonObject(0).getJsonObject("photo")
                                            .getJsonArray("images").getJsonObject(1).getString("src");
                                } catch (Exception e) {
                                    logger.warn("facebook post url exception", e);
                                }

                                out.println(facebook_Post_Url);

                                facebook_photo_created_time_calendar = Calendar
                                        .getInstance(TimeZone.getTimeZone(timeZone_ID));
                                facebook_photo_created_time_calendar
                                        .setTimeInMillis(queryResults.get(0).getLong("created_time") * 1000);
                                out.print("Comment posted on:");
                                out.println(facebook_photo_created_time_calendar.getTime());

                                if (null != facebook_Post_Url && !"".equals(facebook_Post_Url)) {
                                    if (null != old_facebook_Post_Url && !"".equals(old_facebook_Post_Url)) {
                                        if (facebook_Post_Url.equals(old_facebook_Post_Url)) {
                                            out.print(
                                                    "Facebook photo post has not changed from previous fetch, nothing has been set");
                                        }

                                        if (!facebook_Post_Url.equals(old_facebook_Post_Url)) {
                                            facebook_Picture_Post = true;
                                            facebook_Label_visible = true;
                                            facebook_Label_visible_set_once = true;
                                        }
                                    }

                                    else {
                                        facebook_Picture_Post = true;
                                        facebook_Label_visible = true;
                                        facebook_Label_visible_set_once = true;
                                    }
                                }
                            }

                        } catch (FacebookException e) {
                            logger.warn("Unexpected error", e);
                        } catch (Exception e) {
                            logger.warn("Unexpected error", e);
                        }

                        //compare text and picture post dates, if facebook_Picture_Post && facebook_Text_Post are true, and dates are not null
                        // which ever was posted last, clear facebook_post = ""; or facebook_Post_Url = "";
                        if (facebook_Picture_Post && facebook_Text_Post) {
                            if (facebook_photo_created_time_calendar.before(facebook_created_time_calendar)) {
                                facebook_Post_Url = "";

                            }

                            else {
                                facebook_post = "";

                            }
                        }
                    }

                    // Get Daily Hadith =================================================================================
                    if (getHadith) {
                        getHadith = false;
                        try {
                            c = DBConnect.connect();

                            if (dtIslamic.getMonthOfYear() == 9 && dtIslamic.getDayOfMonth() < 19) {
                                SQL = "select hadith, translated_hadith from hadith WHERE topic = 'fasting' and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                            }
                            //                                if (dtIslamic.getMonthOfYear()==9){SQL ="select hadith, translated_hadith from hadith WHERE ID = 2872";}
                            else if (dtIslamic.getMonthOfYear() == 9 && dtIslamic.getDayOfMonth() > 19) {
                                SQL = "select hadith, translated_hadith from hadith WHERE topic = 'Virtues of the Night of Qadr' and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                            } else if (dtIslamic.getMonthOfYear() == 9 && dtIslamic.getDayOfMonth() > 28) {
                                SQL = "select hadith, translated_hadith from hadith WHERE translated_hadith LIKE '%fitr %' and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                            } else if (dtIslamic.getMonthOfYear() == 10 && dtIslamic.getDayOfMonth() == 1) {
                                SQL = "select hadith, translated_hadith from hadith WHERE translated_hadith LIKE '%fitr %' and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                            }
                            //SELECT * FROM hadith WHERE translated_hadith LIKE '%fitr %'
                            else if (dtIslamic.getMonthOfYear() == 12 && dtIslamic.getDayOfMonth() < 13) {
                                SQL = "select hadith, translated_hadith from hadith WHERE topic = 'Hajj (Pilgrimage)' and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                            } else if (dayofweek_int == 6) {
                                SQL = "select hadith, translated_hadith from hadith WHERE day = '5' and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                            }

                            else if (dtIslamic.getMonthOfYear() == 1 && dtIslamic.getDayOfMonth() > 7
                                    && dtIslamic.getDayOfMonth() < 12) {
                                SQL = "select hadith, translated_hadith from hadith WHERE (translated_hadith LIKE '%Ashura%') and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                            }

                            else {
                                SQL = "select * from hadith WHERE day = '0' and length(translated_hadith)<"
                                        + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                        + " ORDER BY RAND( ) LIMIT 1";
                                //                                    SQL = "select * from hadith where  length(translated_hadith)>527"; // the bigest Hadith
                            }
                            rs = c.createStatement().executeQuery(SQL);
                            while (rs.next()) {
                                hadith = rs.getString("hadith");
                                translated_hadith = rs.getString("translated_hadith");

                            }
                            c.close();
                            System.out.println("arabic hadith length" + hadith.length());
                            System.out.println(" english hadith length" + translated_hadith.length());
                            // 528 length should be the max allowed for the hadith in english, generally arabic hadith  is smaller than english translation
                            facebook_hadith = "Hadith of the Day:\n\n" + hadith + "\n\n" + translated_hadith;

                            // check if a notification has already been sent, to avoid flooding users with notifications, i.e during system restarts
                            c = DBConnect.connect();
                            SQL = "Select * from facebook_hadith_notification where id = (select max(id) from facebook_hadith_notification)";
                            rs = c.createStatement().executeQuery(SQL);
                            while (rs.next()) {
                                id = rs.getInt("id");
                                hadith_notification_Date = rs.getDate("notification_date");
                            }
                            c.close();
                            hadith_notification_Date_cal = Calendar.getInstance();
                            hadith_notification_Date_cal.setTime(hadith_notification_Date);
                            hadith_notification_Date_cal.set(Calendar.MILLISECOND, 0);
                            hadith_notification_Date_cal.set(Calendar.SECOND, 0);

                            //                                System.out.println(hadith_notification_Date_cal.getTime());
                            System.out.println(Calendar_now.getTime());
                            if (Calendar_now.compareTo(hadith_notification_Date_cal) == 0) {
                                System.out.println("hadith has already been posted today to Facebook");
                            }

                            if (Calendar_now.compareTo(hadith_notification_Date_cal) != 0) {
                                try {

                                    if (facebook_notification_enable) {
                                        try {
                                            String pageID = "me/feed";
                                            facebookClient.publish(pageID, FacebookType.class,
                                                    Parameter.with("message", facebook_hadith));

                                            //                                                DefaultFacebookClient fbClient;
                                            //                                                fbClient = new DefaultFacebookClient(pageAccessToken);
                                            //                                                fbClient.publish("me/feed", FacebookType.class, Parameter.with("message", "Aloha! ;)"));

                                            c = DBConnect.connect();
                                            PreparedStatement ps = c.prepareStatement(
                                                    "INSERT INTO prayertime.facebook_hadith_notification (notification_date) VALUE (?)");
                                            java.sql.Timestamp mysqldate = new java.sql.Timestamp(
                                                    new java.util.Date().getTime());
                                            ps.setTimestamp(1, mysqldate);
                                            ps.executeUpdate();
                                            c.close();
                                            System.out.println("hadith posted to Facebook: \n" + facebook_hadith);
                                        } catch (FacebookException e) {
                                            logger.warn("Unexpected error", e);
                                        }
                                    }

                                } catch (FacebookException e) {
                                    logger.warn("Unexpected error", e);
                                } catch (Exception e) {
                                    logger.warn("Unexpected error", e);
                                }
                            }
                        } catch (Exception e) {
                            logger.warn("Unexpected error", e);
                        }

                    }
                }

                catch (SQLException e) {
                    System.out.println("Error on Database connection");
                    logger.warn("Unexpected error", e);
                } catch (ParseException e) {
                    logger.warn("Unexpected error", e);
                } catch (Exception e) {
                    logger.warn("Unexpected error", e);
                }

            }
        }, 0, 3600000);
        //        }, 0, 120000);        

        // Timer to traslate labels from arabic to english on the screen====================================================

        //        translate_lastTimerCall = System.nanoTime();
        translate_timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                if (now > translate_lastTimerCall + 40000_000_000l) {
                    try {
                        update_labels();
                    } catch (Exception e) {
                        logger.warn("Unexpected error", e);
                    }
                    translate_lastTimerCall = now;
                }
            }
        };

        // Timer to update clock====================================================

        //        translate_lastTimerCall = System.nanoTime();
        clock_update_timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                if (now > clock_update_lastTimerCall + 1000_000_000l) {
                    try {
                        play_athan();
                    } catch (Exception e) {
                        logger.warn("Unexpected error", e);
                    }
                    clock_update_lastTimerCall = now;
                }
            }
        };

        hour_Label.textProperty().bind(hour);
        minute_Label.textProperty().bind(minute);
        second_Label.textProperty().bind(second);
        date_Label.textProperty().bind(date);

        Timeline clock = new Timeline(new KeyFrame(Duration.seconds(0), evt -> {
            LocalTime now = LocalTime.now();
            hour.set(new SimpleDateFormat("h").format(new Date()));
            minute.set(String.format("%02d", now.getMinute()));
            second.set(String.format("%d", now.getSecond()));
            date.set(new SimpleDateFormat("EEEE, d MMMM").format(Calendar_now.getTime()));

        }), new KeyFrame(Duration.seconds(1)));
        clock.setCycleCount(Animation.INDEFINITE);
        clock.play();

        // Timer to change friday prayer label====================================================

        //        translate_lastTimerCall = System.nanoTime();
        //        friday_update_timer = new AnimationTimer() {
        //            @Override public void handle(long now) {
        //                if (now > friday_update_lastTimerCall + 1500_000_000l) 
        //                {
        //                    try {update_friday_label();} 
        //                    catch (Exception e) {logger.warn("Unexpected error", e);}
        //                    friday_update_lastTimerCall = now;
        //                }
        //            }
        //        };   

        // PIR sensor thread to turn on/Off TV screen to save energy ===============================================================        
        new Thread(() -> {
            //            try {
            //                Thread.sleep(1000);
            //            } catch (InterruptedException ex) {
            //                java.util.logging.Logger.getLogger(JavaFXApplication4.class.getName()).log(Level.SEVERE, null, ex);
            //            }
            final GpioController gpioSensor = GpioFactory.getInstance();
            sensor_lastTimerCall = System.nanoTime();
            final GpioPinDigitalInput sensor = gpioSensor.provisionDigitalInputPin(RaspiPin.GPIO_02,
                    PinPullResistance.PULL_DOWN);

            sensor.addListener(new GpioPinListenerDigital() {
                @Override
                public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {

                    if (event.getState().isHigh()) {
                        sensor_lastTimerCall = System.nanoTime();
                        if (!hdmiOn && !pir_disactive_startup) {
                            if (!prayer_In_Progress) {
                                ProcessBuilder processBuilder1 = new ProcessBuilder("bash", "-c",
                                        "echo \"as\" | cec-client -d 1 -s \"standby 0\" RPI");
                                hdmiOn = true;
                                startup = false;
                                System.out.println("Tv turned on");
                                try {
                                    Thread.sleep(2500);
                                    processBuilder1.start();
                                    Thread.sleep(2500);
                                    processBuilder1.start();
                                } catch (IOException e) {
                                    logger.warn("Unexpected error", e);
                                } catch (InterruptedException ex) {
                                    java.util.logging.Logger.getLogger(JavaFXApplication4.class.getName())
                                            .log(Level.SEVERE, null, ex);
                                }

                            }

                            if (prayer_In_Progress) {

                                Calendar cal = Calendar.getInstance();
                                int hour_Now_int = cal.get(Calendar.HOUR_OF_DAY);
                                int hourbefore_fajr_int = fajr_cal.get(Calendar.HOUR_OF_DAY) - 1;
                                hourbefore_fajr_int = hourbefore_fajr_int - 1;
                                //                                System.out.println("hour now is" + hour_Now_int);
                                //                                System.out.println("fajr hour -1 hour is" + hourbefore_fajr_int);

                                if (hour_Now_int >= 0 && hour_Now_int <= hourbefore_fajr_int) {

                                    System.out.println("prayer detected in after hours");
                                    if (System.nanoTime() > proximity_lastTimerCall
                                            + delay_turnOnTV_after_Prayers_nightmode) {
                                        //                                    System.out.println(proximity_lastTimerCall + delay_turnOnTV_after_Prayers_nightmode);
                                        //                                    System.out.println(System.nanoTime());
                                        ProcessBuilder processBuilder1 = new ProcessBuilder("bash", "-c",
                                                "echo \"as\" | cec-client -d 1 -s \"standby 0\" RPI");
                                        hdmiOn = true;
                                        prayer_In_Progress = false;
                                        System.out.println("Tv turned on");
                                        try {
                                            Thread.sleep(2500);
                                            processBuilder1.start();
                                            Thread.sleep(2500);
                                            processBuilder1.start();
                                        } catch (IOException e) {
                                            logger.warn("Unexpected error", e);
                                        } catch (InterruptedException ex) {
                                            java.util.logging.Logger.getLogger(JavaFXApplication4.class.getName())
                                                    .log(Level.SEVERE, null, ex);
                                        }
                                    }
                                }

                                else {
                                    System.out.println("prayer detected during normal hours");

                                    if (fajr_prayer_In_Progress_notification && cal.after(fajr_jamaat_cal)
                                            && cal.before(fajr_jamaat_update_cal)) {
                                        fajr_prayer_In_Progress_notification = false;
                                        Pushover p = new Pushover("WHq3q48zEFpTqU47Wxygr3VMqoodxc",
                                                "skhELgtWRXslAUrYx9yp1s0Os89JTF");
                                        try {
                                            p.sendMessage("Fajr Jamaa at Daar Ibn Abass has just started");
                                            System.out.println("Prayer in progress notification sent");
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        send_Broadcast_msg = true;
                                        broadcast_msg = "Fajr Jamaa at Daar Ibn Abass has just started";
                                    }
                                    if (zuhr_prayer_In_Progress_notification && cal.after(zuhr_jamaat_cal)
                                            && cal.before(zuhr_plus15_cal)) {
                                        zuhr_prayer_In_Progress_notification = false;
                                        Pushover p = new Pushover("WHq3q48zEFpTqU47Wxygr3VMqoodxc",
                                                "skhELgtWRXslAUrYx9yp1s0Os89JTF");
                                        try {
                                            p.sendMessage("Zuhr Jamaa at Daar Ibn Abass has just started");
                                            System.out.println("Prayer in progress notification sent");
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        send_Broadcast_msg = true;
                                        broadcast_msg = "Zuhr Jamaa at Daar Ibn Abass has just started";
                                    }
                                    if (asr_prayer_In_Progress_notification && cal.after(asr_jamaat_cal)
                                            && cal.before(asr_jamaat_update_cal)) {
                                        asr_prayer_In_Progress_notification = false;
                                        Pushover p = new Pushover("WHq3q48zEFpTqU47Wxygr3VMqoodxc",
                                                "skhELgtWRXslAUrYx9yp1s0Os89JTF");
                                        try {
                                            p.sendMessage("Asr Jamaa at Daar Ibn Abass has just started");
                                            System.out.println("Prayer in progress notification sent");
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        send_Broadcast_msg = true;
                                        broadcast_msg = "Asr Jamaa at Daar Ibn Abass has just started";
                                    }

                                    if (maghrib_prayer_In_Progress_notification && cal.after(maghrib_cal)
                                            && cal.before(maghrib_plus15_cal)) {
                                        maghrib_prayer_In_Progress_notification = false;
                                        Pushover p = new Pushover("WHq3q48zEFpTqU47Wxygr3VMqoodxc",
                                                "skhELgtWRXslAUrYx9yp1s0Os89JTF");
                                        try {
                                            p.sendMessage("Maghrib Jamaa at Daar Ibn Abass has just started");
                                            System.out.println("Prayer in progress notification sent");
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        send_Broadcast_msg = true;
                                        broadcast_msg = "Maghrib Jamaa at Daar Ibn Abass has just started";
                                    }

                                    if (isha_prayer_In_Progress_notification && cal.after(isha_jamaat_cal)
                                            && cal.before(isha_jamaat_update_cal)) {
                                        isha_prayer_In_Progress_notification = false;
                                        Pushover p = new Pushover("WHq3q48zEFpTqU47Wxygr3VMqoodxc",
                                                "skhELgtWRXslAUrYx9yp1s0Os89JTF");
                                        try {
                                            p.sendMessage("Isha Jamaa at Daar Ibn Abass has just started");
                                            System.out.println("Prayer in progress notification sent");
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                        }
                                        send_Broadcast_msg = true;
                                        broadcast_msg = "Isha Jamaa at Daar Ibn Abass has just started";
                                    }

                                    if (System.nanoTime() > proximity_lastTimerCall
                                            + delay_turnOnTV_after_Prayers) {
                                        //                                    System.out.println(proximity_lastTimerCall + delay_turnOnTV_after_Prayers);
                                        //                                    System.out.println(System.nanoTime());
                                        ProcessBuilder processBuilder1 = new ProcessBuilder("bash", "-c",
                                                "echo \"as\" | cec-client -d 1 -s \"standby 0\" RPI");
                                        hdmiOn = true;
                                        prayer_In_Progress = false;
                                        System.out.println("Tv turned on");
                                        try {
                                            Thread.sleep(2500);
                                            processBuilder1.start();
                                            Thread.sleep(2500);
                                            processBuilder1.start();
                                        } catch (IOException e) {
                                            logger.warn("Unexpected error", e);
                                        } catch (InterruptedException ex) {
                                            java.util.logging.Logger.getLogger(JavaFXApplication4.class.getName())
                                                    .log(Level.SEVERE, null, ex);
                                        }
                                    }

                                    if (send_Broadcast_msg) {
                                        try {
                                            send_Broadcast_msg = false;
                                            socket1 = new DatagramSocket(null);
                                            socket1.setBroadcast(true);
                                            buf1 = broadcast_msg.getBytes();
                                            group = InetAddress.getByName("255.255.255.255");
                                            packet1 = new DatagramPacket(buf1, buf1.length, group, 8888);
                                            socket1.send(packet1);
                                        } catch (Exception e) {
                                            logger.warn("Unexpected error", e);
                                        }
                                    }

                                }

                            }
                        }
                    }

                    if (event.getState().isLow()) {
                        sensorLow = true;
                    }
                }
            });

            System.out.println(" ... Motion Detection Starting.....");

            for (;;) {
                try {

                    if (System.nanoTime() > sensor_lastTimerCall + delay_turnOffTV_after_inactivity && sensorLow
                            && hdmiOn || startup) {
                        startup = false;
                        System.out.println("All is quiet...");
                        ProcessBuilder processBuilder2 = new ProcessBuilder("bash", "-c",
                                "echo \"standby 0000\" | cec-client -d 1 -s \"standby 0\" RPI");
                        hdmiOn = false;
                        try {
                            Process process2 = processBuilder2.start();
                        } catch (IOException e) {
                            logger.warn("Unexpected error", e);
                        }
                        sensor_lastTimerCall = System.nanoTime();
                        sensorLow = false;
                    }
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    gpioSensor.shutdown();
                    Thread.currentThread().interrupt();
                }
            }

        }).start();

        // //Infrared sensor thread to turn on/Off TV screen when Prayer starts ===============================================================        
        new Thread(() -> {

            System.out.println(" ... Prayer Detection Starting.....");
            for (;;) {
                try {
                    DatagramSocket socket = new DatagramSocket(8888, InetAddress.getByName("0.0.0.0"));
                    socket.setBroadcast(true);
                    byte[] buf = new byte[512];
                    DatagramPacket packet = new DatagramPacket(buf, buf.length);
                    while (true) {

                        socket.receive(packet);
                        String received = new String(packet.getData(), 0, packet.getLength());
                        System.out.println("UDP Packet received: " + received);
                        proximity_lastTimerCall = System.nanoTime();

                        if (received.equals("Prayer in progress") && pir_sensor) {
                            ProcessBuilder processBuilder2 = new ProcessBuilder("bash", "-c",
                                    "echo \"standby 0000\" | cec-client -d 1 -s \"standby 0\" RPI");
                            try {
                                if (hdmiOn) {
                                    Process process2 = processBuilder2.start();
                                    System.out.println("Prayer in Progress...Turning Off TV(s)");
                                    Thread.sleep(1000);
                                    hdmiOn = false;
                                    prayer_In_Progress = true;
                                    proximity_lastTimerCall = System.nanoTime();

                                }
                            } catch (IOException e) {
                                logger.warn("Unexpected error", e);
                            }

                        }

                        else if (received.equals("refresh background")) {

                            try {
                                System.out.println("Changing Background...");
                                images = new ArrayList<String>();
                                //change on osx
                                if (platform.equals("osx"))
                                //        {directory = new File("/Users/ossama/Projects/Pi/javafx/prayertime/background/");} 
                                {
                                    directory = new File(
                                            "/Users/ossama/Dropbox/Projects/Pi/javafx/prayertime/background");
                                }
                                //        {directory = new File("/Users/samia/NetBeansProjects/prayertime_files/background/");}
                                //change on Pi
                                if (platform.equals("pi")) {
                                    directory = new File("/home/pi/prayertime/Images/");
                                }

                                files = directory.listFiles();
                                for (File f : files) {
                                    images.add(f.getName());
                                }
                                System.out.println(images);
                                countImages = images.size();
                                imageNumber = (int) (Math.random() * countImages);
                                rand_Image_Path = directory + "/" + images.get(imageNumber);
                                System.out.println(rand_Image_Path);
                                String image = new File(rand_Image_Path).toURI().toURL().toString();

                                Platform.runLater(new Runnable() {
                                    @Override
                                    public void run() {
                                        Mainpane.setStyle("-fx-background-image: url('" + image
                                                + "'); -fx-background-image-repeat: repeat; -fx-background-size: 1080 1920;-fx-background-position: bottom left;");

                                    }
                                });
                            } catch (IOException e) {
                                logger.warn("Unexpected error", e);
                            }

                        }

                        else if (received.equals("refresh hadith")) {

                            System.out.println("Getting Hadith...");

                            try {
                                c = DBConnect.connect();

                                if (dtIslamic.getMonthOfYear() == 9) {
                                    SQL = "select hadith, translated_hadith from hadith WHERE topic = 'fasting' and length(translated_hadith)<"
                                            + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                            + " ORDER BY RAND( ) LIMIT 1";
                                }
                                //                                if (dtIslamic.getMonthOfYear()==9){SQL ="select hadith, translated_hadith from hadith WHERE ID = 2872";}

                                else if (dtIslamic.getMonthOfYear() == 12) {
                                    SQL = "select hadith, translated_hadith from hadith WHERE topic = 'Hajj (Pilgrimage)' and length(translated_hadith)<"
                                            + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                            + " ORDER BY RAND( ) LIMIT 1";
                                } else if (dayofweek_int == 5 || dayofweek_int == 6) {
                                    SQL = "select hadith, translated_hadith from hadith WHERE day = '5' and length(translated_hadith)<"
                                            + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                            + " ORDER BY RAND( ) LIMIT 1";
                                } else {
                                    SQL = "select * from hadith WHERE day = '0' and length(translated_hadith)<"
                                            + max_en_hadith_len + " and length(hadith)<" + max_ar_hadith_len
                                            + " ORDER BY RAND( ) LIMIT 1";
                                    //                                    SQL = "select * from hadith where  length(translated_hadith)>527"; // the bigest Hadith
                                }
                                rs = c.createStatement().executeQuery(SQL);
                                while (rs.next()) {
                                    hadith = rs.getString("hadith");
                                    translated_hadith = rs.getString("translated_hadith");

                                }
                                c.close();
                                System.out.println("arabic hadith length" + hadith.length());
                                System.out.println(" english hadith length" + translated_hadith.length());

                            } catch (Exception e) {
                                logger.warn("Unexpected error", e);
                            }

                        }

                        if (received.equals("prayer call")) {
                            ProcessBuilder processBuilder_Athan = new ProcessBuilder("bash", "-c",
                                    "mpg123 /home/pi/prayertime/Audio/athan1.mp3");

                            try {
                                Process process = processBuilder_Athan.start();
                            } catch (IOException e) {
                                logger.warn("Unexpected error", e);
                            }
                        }

                        if (received.equals("ping")) {
                            DatagramSocket send_datagramSocket = new DatagramSocket();
                            InetAddress hostAddress = InetAddress.getByName("localhost");

                            String outString = "pong";
                            byte[] send_buffer = outString.getBytes();

                            InetAddress receiverAddress = InetAddress.getLocalHost();

                            DatagramPacket send_packet = new DatagramPacket(send_buffer, send_buffer.length,
                                    hostAddress, 9999);
                            send_datagramSocket.send(packet);

                        }

                        if (received.equals("snapshot")) {
                            System.out.println("saving...");
                            //                            WritableImage snapshot_prayertime_pane = prayertime_pane.getScene().snapshot(null);
                            //                            WritableImage snapshot_full = scene.snapshot(null);
                            //                            ImageIO.write(SwingFXUtils.fromFXImage(snapshot_full, null), "png", file);

                            WritableImage image = new WritableImage(400, 400);
                            scene.snapshot(image);
                            File outputfile = new File("saved.png");
                            ImageIO.write((RenderedImage) image, "png", outputfile);

                            System.out.println("saved...");
                        }

                        if (received.equals("refresh facebook")) {
                            if (facebook_Receive && internet_able) {
                                getFacebook = false;
                                facebook_Text_Post = false;
                                facebook_Picture_Post = false;
                                facebook_post = "";
                                //                            facebook_Post_Url = "";
                                facebook_Fan_Count = "";
                                Calendar facebook_created_time_calendar = null;
                                Calendar facebook_photo_created_time_calendar = null;
                                Calendar facebook_check_post_date = Calendar.getInstance();
                                facebook_check_post_date.add(Calendar.DAY_OF_MONTH, -6);
                                long facebook_check_post_Unix_Time = facebook_check_post_date.getTimeInMillis()
                                        / 1000;
                                //                            out.println(facebook_check_post_Unix_Time);
                                String query = "SELECT message,timeline_visibility, created_time   FROM stream WHERE source_id = "
                                        + page_ID
                                        + " AND message AND strlen(attachment.fb_object_type) < 1 AND type != 56 AND type = 46  AND strpos(message, \"prayer time(s)\") < 0 AND strpos(message, \"White days\") < 0 AND strpos(message, \"Hadith of the Day:\") < 0 AND created_time > "
                                        + facebook_check_post_Unix_Time + " LIMIT 1";
                                //                            String query = "{\"messages\":\"SELECT message,timeline_visibility, created_time   FROM stream WHERE source_id = " + page_ID + " AND message AND strlen(attachment.fb_object_type) < 1 AND type != 56 AND type = 46  AND strpos(message, \'prayer time(s)\') < 0 AND strpos(message, \'White days\') < 0 AND strpos(message, \'Hadith of the Day:\') < 0 AND created_time > " + facebook_check_post_Unix_Time + " LIMIT 1\" ,  \"count\": \"SELECT fan_count FROM page WHERE page_id = " + page_ID + "\"}";
                                //                            out.println(query);
                                try {
                                    List<JsonObject> queryResults = facebookClient.executeFqlQuery(query,
                                            JsonObject.class);

                                    if (!queryResults.isEmpty()) {
                                        JsonObject facebookPost_J = queryResults.get(0);
                                        facebook_post = facebookPost_J.getString("message");

                                        //                                    facebook_post = "Asalamualaikum,\n" + "We have been given a large printer/copier for administration at Daar Ibn\n Abbas. Is there any brothers available to pick it up from Lakemba? ";

                                        String[] lines = facebook_post.split("\r\n|\r|\n");

                                        if (null != facebook_post && !"".equals(facebook_post)) {
                                            if (facebook_post.contains("\n\n")) {
                                                out.println("'/n/n' detected");
                                                facebook_post = facebook_post.replace("\n\n", "\n");
                                                out.println(facebook_post);
                                            }
                                            facebook_created_time_calendar = Calendar
                                                    .getInstance(TimeZone.getTimeZone(timeZone_ID));
                                            facebook_created_time_calendar.setTimeInMillis(
                                                    queryResults.get(0).getLong("created_time") * 1000);
                                            //                                        out.print("Comment posted on:"); out.println(facebook_created_time_calendar.getTime());
                                            if (facebook_post.contains("tonight")
                                                    || facebook_post.contains("today") && Days
                                                            .daysBetween(new DateMidnight(DateTime_now),
                                                                    new DateMidnight(
                                                                            facebook_created_time_calendar))
                                                            .getDays() != 0) {
                                                out.println(
                                                        "Facebook post contains either  the word 'today' or 'tonight' and has not been posted today");
                                                facebook_post = "";
                                                facebook_Label_visible = false;
                                            }

                                            else if (facebook_post.length() > 390 || lines.length > 6) {
                                                System.out.println(
                                                        "Facebook post is too large, it will not be posted");
                                                System.out.println("Facebook lines: " + lines.length);
                                                System.out.println(
                                                        "Facebook string length: " + facebook_post.length());
                                                facebook_post = "";
                                                facebook_Label_visible = false;
                                            }

                                            else {
                                                facebook_Text_Post = true;
                                                facebook_Label_visible = true;
                                                facebook_Label_visible_set_once = true;
                                            }
                                        }
                                    } else {
                                        out.println("Facebook post is empty");
                                    }
                                } catch (FacebookException e) {
                                    logger.warn("Unexpected error", e);
                                } catch (Exception e) {
                                    logger.warn("Unexpected error", e);
                                }

                                query = "SELECT fan_count FROM page WHERE page_id = " + page_ID;
                                try {
                                    List<JsonObject> queryResults = facebookClient.executeFqlQuery(query,
                                            JsonObject.class);
                                    facebook_Fan_Count = queryResults.get(0).getString("fan_count");
                                    out.println("Page Likes: " + facebook_Fan_Count);

                                } catch (FacebookException e) {
                                    logger.warn("Unexpected error", e);
                                } catch (Exception e) {
                                    logger.warn("Unexpected error", e);
                                }

                                query = "SELECT attachment.media.photo.images.src, created_time   FROM stream WHERE source_id = "
                                        + page_ID + "  AND type = 247 AND created_time > "
                                        + facebook_check_post_Unix_Time + " LIMIT 1";
                                try {
                                    List<JsonObject> queryResults = facebookClient.executeFqlQuery(query,
                                            JsonObject.class);
                                    if (!queryResults.isEmpty()) {
                                        if (null != facebook_Post_Url && !"".equals(facebook_Post_Url)) {
                                            old_facebook_Post_Url = new String(facebook_Post_Url);
                                        }
                                        //                                    out.println(old_facebook_Post_Url);

                                        facebook_Post_Url = queryResults.get(0).getJsonObject("attachment")
                                                .getJsonArray("media").getJsonObject(0).getJsonObject("photo")
                                                .getJsonArray("images").getJsonObject(1).getString("src");
                                        //                                    out.println(facebook_Post_Url);

                                        facebook_photo_created_time_calendar = Calendar
                                                .getInstance(TimeZone.getTimeZone(timeZone_ID));
                                        facebook_photo_created_time_calendar.setTimeInMillis(
                                                queryResults.get(0).getLong("created_time") * 1000);
                                        out.print("Comment posted on:");
                                        out.println(facebook_photo_created_time_calendar.getTime());

                                        if (null != facebook_Post_Url && !"".equals(facebook_Post_Url)) {
                                            if (null != old_facebook_Post_Url
                                                    && !"".equals(old_facebook_Post_Url)) {
                                                if (facebook_Post_Url.equals(old_facebook_Post_Url)) {
                                                    out.print(
                                                            "Facebook photo post has not changed from previous fetch, nothing has been set");
                                                }

                                                if (!facebook_Post_Url.equals(old_facebook_Post_Url)) {
                                                    facebook_Picture_Post = true;
                                                    facebook_Label_visible = true;
                                                    facebook_Label_visible_set_once = true;
                                                }
                                            }

                                            else {
                                                facebook_Picture_Post = true;
                                                facebook_Label_visible = true;
                                                facebook_Label_visible_set_once = true;
                                            }
                                        }
                                    }

                                } catch (FacebookException e) {
                                    logger.warn("Unexpected error", e);
                                } catch (Exception e) {
                                    logger.warn("Unexpected error", e);
                                }

                                //compare text and picture post dates, if facebook_Picture_Post && facebook_Text_Post are true, and dates are not null
                                // which ever was posted last, clear facebook_post = ""; or facebook_Post_Url = "";
                                if (facebook_Picture_Post && facebook_Text_Post) {
                                    if (facebook_photo_created_time_calendar
                                            .before(facebook_created_time_calendar)) {
                                        facebook_Post_Url = "";

                                    }

                                    else {
                                        facebook_post = "";

                                    }
                                }
                            }
                        }

                    }
                }

                //                 catch(InterruptedException e){Thread.currentThread().interrupt();}
                catch (Exception e) {
                    logger.warn("Unexpected error", e);
                    Thread.currentThread().interrupt();
                }

            }

        }).start();

    }

From source file:net.danlew.android.joda.ZoneInfoCompiler.java

License:Apache License

/**
 * @return false if error./*from   ww  w .  j  a  v a 2 s.  c  o m*/
 */
static boolean test(String id, DateTimeZone tz) {
    if (!id.equals(tz.getID())) {
        return true;
    }

    // Test to ensure that reported transitions are not duplicated.

    long millis = ISOChronology.getInstanceUTC().year().set(0, 1850);
    long end = ISOChronology.getInstanceUTC().year().set(0, 2050);

    int offset = tz.getOffset(millis);
    String key = tz.getNameKey(millis);

    List<Long> transitions = new ArrayList<Long>();

    while (true) {
        long next = tz.nextTransition(millis);
        if (next == millis || next > end) {
            break;
        }

        millis = next;

        int nextOffset = tz.getOffset(millis);
        String nextKey = tz.getNameKey(millis);

        if (offset == nextOffset && key.equals(nextKey)) {
            System.out.println(
                    "*d* Error in " + tz.getID() + " " + new DateTime(millis, ISOChronology.getInstanceUTC()));
            return false;
        }

        if (nextKey == null || (nextKey.length() < 3 && !"??".equals(nextKey))) {
            System.out.println("*s* Error in " + tz.getID() + " "
                    + new DateTime(millis, ISOChronology.getInstanceUTC()) + ", nameKey=" + nextKey);
            return false;
        }

        transitions.add(Long.valueOf(millis));

        offset = nextOffset;
        key = nextKey;
    }

    // Now verify that reverse transitions match up.

    millis = ISOChronology.getInstanceUTC().year().set(0, 2050);
    end = ISOChronology.getInstanceUTC().year().set(0, 1850);

    for (int i = transitions.size(); --i >= 0;) {
        long prev = tz.previousTransition(millis);
        if (prev == millis || prev < end) {
            break;
        }

        millis = prev;

        long trans = transitions.get(i).longValue();

        if (trans - 1 != millis) {
            System.out.println(
                    "*r* Error in " + tz.getID() + " " + new DateTime(millis, ISOChronology.getInstanceUTC())
                            + " != " + new DateTime(trans - 1, ISOChronology.getInstanceUTC()));

            return false;
        }
    }

    return true;
}