  var AtlasData = new Array(620)
    var sMonth = new Array(13)

	var currentYear, currentDay, currentHour, currentMonth;

    var HourRise, HourSet ;
    var AlphaSun, DeltaSun ;

    var T, T2, T3 ;
    var ThetaSun, Rsun, LonE

    var Pi=Math.PI ;
    var Twopi=2.*Pi ;
    var Drc = Math.PI/180. ;

    function PrintCandleLighting() {
// -- Month names --
      sMonth[1] = "January  "
      sMonth[2] = "February "
      sMonth[3] = "March    "
      sMonth[4] = "April    "
      sMonth[5] = "May      "
      sMonth[6] = "June     "
      sMonth[7] = "July     "
      sMonth[8] = "August   "
      sMonth[9] = "September"
      sMonth[10] = "October  "
      sMonth[11] = "November "
      sMonth[12] = "December "

      getRiseSet()
    }
	
	
    function getDate(JD) {
      ZZ = JD + 0.5
      Z = Math.floor(ZZ)
      F = ZZ - Z

      if (Z < 2299161) {
        a = Z
      }
      else {
        Alpha = Math.floor((Z - 1867216.25) / 36524.25)
        a = Z + 1 + Alpha - Math.floor(Alpha / 4)
      }

      B = a + 1524
      C = Math.floor((B - 122.1) / 365.25)
      D = Math.floor(365.25 * C)
      e = Math.floor((B - D) / 30.6001)
      Daye = B - D - Math.floor(30.6001 * e) + F

      if (e < 14)
        Mnth = e - 1
      else
        Mnth = e - 13


      if (Mnth > 2.5)
        Yr = C - 4716
      else
        Yr = C - 4715

   
      dd=Math.floor(Daye)
      yy=Yr
      if (Yr <   10) yy = "   " + y
      if (Yr <  100) yy = "  "  + y
      if (Yr < 1000) yy = " "   + y

      s=sMonth[Mnth].substring(0, 3) + ". " + dd + ", " + yy
      return s
    }


    function RiseSet(JD, UT, DeltaGMT, Geolat, Geolon) {
      var ASUN = new Array(4) ;
      var DSUN = new Array(4) ;
      var SmallH0, JD0, T, T2, T3 ;

      JD0 = JD - UT / 24 ;
      SmallH0=-.83333*Drc ;

      for(k = -1; k < 2; k++) {
        JD = JD0 + k ;
        T = (JD - 2415020.) / 36525. ;
        T2 = T * T ;
        T3 = T2 * T ;
        Sun(T, T2, T3) ;
        SunAD(T, T2, T3) ;
        ASUN[k + 2] = AlphaSun ;
        DSUN[k + 2] = DeltaSun ;

        CosH0 = (Math.sin(SmallH0) - Math.sin(Drc * Geolat) * Math.sin(DSUN[2])) / (Math.cos(Drc * Geolat) * Math.cos(DSUN[2])) ;
      }
      if (Math.abs(CosH0) > 1) {
        HourRise = 999 ;
        HourSet = 999 ;
      }

      var SinH0 = Math.sqrt(1. - CosH0*CosH0) ;
      var Xterm = CosH0 ;
      var Yterm = SinH0 ;
      var Answer=Math.atan2(Yterm, Xterm) ;
      var H0 = Answer / Drc ;

// Calculate Theta0
      T = (JD0 - 2415020.) / 36525. ;
      T2 = T * T ;
      T3 = T2 * T ;
      var T0 = T;  // Used for sunrise and sunset
      var Theta0 = 0.276919398 + 100.0021359 * T + 0.000001075 * T2 ;
      Theta0 = 360. * (Theta0 - Math.floor(Theta0)) ;

      var M0 = (ASUN[2] / Drc + Geolon - Theta0) / 360. ;
      var M1 = M0 - H0 / 360. ;
      var M2 = M0 + H0 / 360. ;

      if (M0 < 0) M0++ ;
      if (M1 < 0) M1++ ;
      if (M2 < 0) M2++ ;
      M0 = M0 - Math.floor(M0) ;
      M1 = M1 - Math.floor(M1) ;
      M2 = M2 - Math.floor(M2) ;

//      alert("Loop 2: Alpha: " + Alpha + "  Delta: " + Delta)
      for (k=0; k<3; k++) {
        Theta = Theta0 + 360.985647 * M1 ;
        T = T0 + M1 / 36525. ;
        T2 = T * T ;
        T3 = T2 * T ;
        //alert("In Loop:   M1: " + M1 + "  Theta0: " + Theta0 + " T0: " + T0 + "  T: " + T)

        Sun(T, T2, T3) ;
        SunAD(T, T2, T3) ;
        //alert("In Loop 2: Alpha: " + Alpha + "  Delta: " + Delta)
        H = Theta - Geolon - AlphaSun / Drc ;
        Arg = Math.sin(Drc * Geolat) * Math.sin(DeltaSun) + Math.cos(Drc * Geolat) * Math.cos(Delta) * Math.cos(Drc * H) ;
        Answer=Math.asin(Arg) ;
        SmallH = Answer / Drc ;
        DeltaM = (SmallH - SmallH0 / Drc) / (360. * Math.cos(DeltaSun) * Math.cos(Drc * Geolat) * Math.sin(Drc * H)) ;
        M1 = M1 + DeltaM ;
      }

      HourRise = 24. * M1 - DeltaGMT ;
      if (HourRise > 24.) HourRise = HourRise - 24. ;
      if (HourRise < 0.) HourRise = HourRise + 24. ;


      for (k=0; k<3; k++) {
        Theta = Theta0 + 360.985647 * M2 ;
        T = T0 + M2 / 36525. ;
        T2 = T * T ;
        T3 = T2 * T ;
        Sun(T, T2, T3) ;
        SunAD(T, T2, T3) ;
        H = Theta - Geolon - AlphaSun / Drc ;
        Arg = Math.sin(Drc * Geolat) * Math.sin(DeltaSun) + Math.cos(Drc * Geolat) * Math.cos(Delta) * Math.cos(Drc * H) ;
        Answer=Math.asin(Arg) ;
        SmallH = Answer / Drc ;
        DeltaM = (SmallH - SmallH0 / Drc) / (360. * Math.cos(DeltaSun) * Math.cos(Drc * Geolat) * Math.sin(Drc * H)) ;
        M2 = M2 + DeltaM ;
      }

      HourSet=24.*M2
      if (HourSet < 0.) HourSet += 24. ;
    }



///////////////////////////////////////////////////////////////////////////
////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
///////////////////////////////////////////////////////////////////////////
    function getRiseSet(Month, Day, Year, Geolat, Geolon, DeltaGMT) {
      var Month=0, Day=0, Year ;
      var UT ;
      Today = new Date() ;

      Month=Today.getMonth() + 1
	  currentMonth = Month
      Day=Today.getDate()
	  currentDay = Day
      Year=Today.getFullYear()
	  currentYear = Year;


      Hr=Today.getHours()
	  currentHour = Hr
      Mn=Today.getMinutes()
      Sc=Today.getSeconds()
//Changed by Kenny
	  var Loc = "42 06 00 N  075 55 00 W EST   -5   *"	//Binghamton's Location string
	  DeltaGMT=parseFloat(Loc.substr(30,3))
      if (Loc.substr(33,2) != "  ") DeltaGMT += parseFloat(Loc.substr(33,2))/60.

      LatRef=parseFloat(Loc.substr(0,2)) + parseFloat(Loc.substr(3,2))/60. +  parseFloat(Loc.substr(6,2))/3600.
      LonRef=parseFloat(Loc.substr(12,3)) + parseFloat(Loc.substr(16,2))/60. +  parseFloat(Loc.substr(19,2))/3600.

      sLatRefDir=Loc.charAt(9)
      sLonRefDir=Loc.charAt(22)

      if (sLonRefDir == "E") LMT = UT + LonRef / 15.
      if (sLonRefDir == "W") LMT = UT - LonRef / 15.

      Geolat=LatRef
      if (sLatRefDir == "S") Geolat=-Geolat

      Geolon=LonRef
      if (sLonRefDir == "W") Geolon=-Geolon

      DeltaLonGMT=Geolon/15.
      CT = parseFloat(Hr) + parseFloat(Mn) / 60. + parseFloat(Sc)/3600.
      UT = CT - DeltaGMT
      UT=15. ;
      Geolon=0.
      DeltaGMT=0.
      var JDS=JDCalc(Month, Day, Year, UT) ;
      DOW=GetDayOfWeek(JDS, UT)

      if (DOW < 6) JDS += 6 - DOW
      if (DOW == 7) JDS += 6
      RiseSet(JDS, UT, DeltaGMT, Geolat, Geolon) ;
      hh=Math.floor(HourRise)
      mm=Math.round(60*(HourRise - hh))
      if (mm < 10) mm = "0" + mm
      DeltaGMT=parseFloat(Loc.substr(30,3))
		if (Loc.substr(33,2) != "  ") DeltaGMT += parseFloat(Loc.substr(33,2))/60.

      HourSet += -DeltaLonGMT + DeltaGMT  // Conversion to local time
      HourSet += -.3  // Subtract 18 minutes for candle lighting time

	  //////Add DayLight Saving time here
	  if ( DSTadd() ) HourSet++
      hh=Math.floor(HourSet)
      mm=Math.floor(60*(HourSet - hh))
      if (mm == 60) {
        mm=0
        hh += 1
      }
      if (mm < 10) mm = "0" + mm
	  document.write("The next Shabbat in Binghamton will start on <br>  ");
      s= "  " + getDate(JDS) + " at " ;
      if (hh > 12) s += " " + Math.floor(hh-12) + ":" + mm  + " PM"
	  	else
			s+=" " + hh + ":" + mm 
	  document.writeln(s);

    }


    function GetDayOfWeek(JD, UT) {
      DOW = (JD - UT / 24. + 1.5) / 7.
      DOW = Math.floor(7 * (DOW - Math.floor(DOW)) + 1.00001)

      return(DOW)
    }


// ****** JDCalc ******
    function JDCalc (Mnth, Dy, Yr, UT) {
      var M, Y ;

      if (Mnth > 2) {
        Y = Math.floor(Yr) ;
        M = Math.floor(Mnth) ;
      }
      else {
        Y = Math.floor(Yr - 1) ;
        M = Math.floor(Mnth + 12) ;
      }

      A = Math.floor(Y / 100) ;
      B = Math.floor(2 - A) + Math.floor(A / 4) ;
      JD1 = Math.floor(365.25 * Y) ;
      JD2 = Math.floor(30.6001 * (M + 1)) ;
      JD = JD1 + JD2 + Dy + 1720994.5 + B ;
      JD = JD + UT / 24 ;
      T = (JD - 2415020.) / 36525 ;
      T2 = T * T ;
      T3 = T2 * T ;

      return JD ;
   }
   
   
    

// this version (JavaScript1.1+) does NOT display NaN.
function DSTadd() {
  var thisYear, AprilDate, OctoberDate, MarchDateEU, OctoberDateEU;
  thisYear = currentYear;

 AprilDate = (2+6 * thisYear - Math.floor (thisYear / 4) ) % 7 + 1;
 OctoberDate=  (31-( Math.floor (thisYear * 5 / 4) + 1) % 7);

	if(currentMonth == 4 && currentDay > AprilDate)
		return true;
	if(currentMonth == 4 && currentDay == AprilDate && currentHour >=2)
		return true;
	
	if(currentMonth == 10 && currentDay < OctoberDate)
		return true;
	if(currentMonth == 10 && currentDay == OctoberDate && currentHour < 2)
		return true;
	
	if(currentMonth > 4 && currentMonth < 10)
 		return true;
		//otherwise...
	return false
}