function WWSun() {

  //--------------------------------------------------------------------------------------
  // Altitude
  // In most countries an altitude of -0.833 degrees is used to compute sunrise/set times
  //--------------------------------------------------------------------------------------
  // später: Texte überarbeiten und zweisprachig...
  // außerdem Hinweise ergänzen: alles "PC-Zeiten", Genauigkeit der Berechnungen...
  var AltitudesForRiseSet = new Array();
  // AltitudesForRiseSet[0] = new Array(  0,     "Center of Sun's disk touches a mathematical horizon");
  // AltitudesForRiseSet[1] = new Array( -0.25,  "Sun's upper limb touches a mathematical horizon");
  // AltitudesForRiseSet[2] = new Array( -0.583, "Center of Sun's disk touches the horizon; atmospheric refraction accounted for");
  // AltitudesForRiseSet[3] = new Array( -0.833, "Sun's supper limb touches the horizon; atmospheric refraction accounted for");
  // AltitudesForRiseSet[4] = new Array( -6,     "Civil twilight (one can no longer read outside without artificial illumination)");
  // AltitudesForRiseSet[5] = new Array(-12,     "Nautical twilight (navigation using a sea horizon no longer possible)");
  // AltitudesForRiseSet[6] = new Array(-15,     "Amateur astronomical twilight (the sky is dark enough for most astronomical observations)");
  // AltitudesForRiseSet[7] = new Array(-18,     "Astronomical twilight (the sky is completely dark)");

  AltitudesForRiseSet[0] = new Array( -0.833, wwLang.strAltitudesSunrise,          wwLang.strAltitudesSunset);
  AltitudesForRiseSet[1] = new Array( -6,     wwLang.strStartCivilTwilight,        wwLang.strEndCivilTwilight);
  AltitudesForRiseSet[2] = new Array(-12,     wwLang.strBeginNauticalTwilight,     wwLang.strEndNauticalTwilight);
  AltitudesForRiseSet[3] = new Array(-18,     wwLang.strBeginAstronomicalTwilight, wwLang.strEndAstronomicalTwilight);

  this.hSunRiseSet  = -0.833;

  // Zeitraum für die Dämmerungsberechnung ("zivile Dämmerung")
  this.hTwilightMax =  0;
  this.hTwilightMin = -6;

  var idxAlt = 0;
  var idxTxtSunrise = 1;
  var idxTxtSunset  = 2;
  var idxSunrise = 3;
  var idxSunset  = 4;

  //-----------------------------------------
  // Sonnenauf-/untergang Position setzen
  //-----------------------------------------
  var saveLat;
  var saveLng;
  var msecNextSwap = 0;
  this.SetSunRiseSetPos = function(lat, lng) {
    if (wwParam.bShowSunRiseSet) {
      saveLat = lat;
      saveLng = lng;
      msecNextSwap = 0;
    }
  }

  //-------------------------------------------------
  // Sonnenauf-/untergang aktualisieren, falls nötig
  //-------------------------------------------------
  var strMoreRiseSet = "";
  this.SetSunRiseSetHtml = function() {
    var jetzt = new Date();
    var tsMinutes = - jetzt.getTimezoneOffset(); // in Minuten (GMT minus Ortszeit)
    var ts = tsMinutes * 60 * 1000;
    var msecJetzt = jetzt.getTime();
    var msecDatum = msecJetzt + wwParam.msecDiff; // msecDiff: Zeitverschiebung durch Parameter beim Aufruf der Seite
    var datum     = new Date(msecDatum);

    if (msecNextSwap <= msecDatum) { // SA und SU neu setzen nach Erreichen der nächsten SA bzw. SU-Zeit oder Koordinatenänderung
      msecNextSwap = this.getSunRiseSet(datum, saveLat, saveLng, ts, this.hSunRiseSet);
      wwMap.SetDaylightWhen(datum);
    }
  }

  //-------------------------------------------
  // Sonnenauf-/untergang HTML Code generieren
  //-------------------------------------------
  var msecPerDay = 24 * 60 * 60 * 1000;

  function DatumPrev(datum) {
    return (new Date(datum.getTime()- msecPerDay));
  }

  function DatumNext(datum) {
    return (new Date(datum.getTime()+ msecPerDay));
  }

  var bSetHtmlSaSu = true;
  this.getSunRiseSet = function(datum, lat, lng, ts, altitude) {
    // zurücksetzen vor erstem Aufruf von SunRiseSet():
    forSaSu = wwTime.forSaSuShort;
    bNeverRise = false;
    bNeverSet  = false;
    var bIterate = false;

    var msecDatum   = datum.getTime();
    var datumSunset  = datum;
    var datumSunrise = datum;
    var bSwap = 0;
    var msecSunrise = SunRiseSet(datum, lat, lng, altitude, 1, bIterate, 1);
    var msecSunset  = SunRiseSet(datum, lat, lng, altitude, 0, bIterate, 1);

    if (msecSunrise < msecSunset) {
      if (msecDatum < msecSunrise)
      {
        datumSunset = DatumPrev(datum);
        msecSunset  = SunRiseSet (datumSunset, lat, lng, altitude, 0, bIterate, 1);
        bSwap = 1;
      } else if (msecSunset < msecDatum) {
        datumSunrise = DatumNext(datum);
        msecSunrise  = SunRiseSet (datumSunrise, lat, lng, altitude, 1, bIterate, 1);
        bSwap = 1;
      }
    } else {
      bSwap = 1;
      if (msecDatum < msecSunset) {
        datumSunrise = DatumPrev(datum);
        msecSunrise  = SunRiseSet (datumSunrise, lat, lng, altitude, 1, bIterate, 1);
        bSwap = 0;
      } else if (msecSunrise < msecDatum) {
        datumSunset = DatumNext(datum);
        msecSunset  = SunRiseSet (datumSunset, lat, lng, altitude, 0, bIterate, 1);
        bSwap = 0;
      }
    }

    for (var idx = 0; idx < AltitudesForRiseSet.length; idx++) {
      if (AltitudesForRiseSet[idx][idxAlt] == altitude) {
        AltitudesForRiseSet[idx][idxSunrise] = msecSunrise;
        AltitudesForRiseSet[idx][idxSunset]  = msecSunset;
      } else {
        if (!bSetHtmlSaSu) {
          continue;
        }
        var altRiseSet = AltitudesForRiseSet[idx][idxAlt];
        // Sunrise
        AltitudesForRiseSet[idx][idxSunrise] = SunRiseSet (datumSunrise, lat, lng, altRiseSet, 1, bIterate, 1);
        if ((altRiseSet < altitude) && (AltitudesForRiseSet[idx][idxSunrise] > msecSunrise)) {
          AltitudesForRiseSet[idx][idxSunrise] = SunRiseSet (DatumPrev(datumSunrise), lat, lng, altRiseSet, 1, bIterate, 1);
        }
        if ((altRiseSet > altitude) && (AltitudesForRiseSet[idx][idxSunrise] < msecSunrise)) {
          AltitudesForRiseSet[idx][idxSunrise] = SunRiseSet (DatumNext(datumSunrise), lat, lng, altRiseSet, 1, bIterate, 1);
        }
        // Sunset
        AltitudesForRiseSet[idx][idxSunset]  = SunRiseSet (datumSunset,  lat, lng, altRiseSet, 0, bIterate, 1);
        if ((altRiseSet < altitude) && (AltitudesForRiseSet[idx][idxSunset] < msecSunset)) {
          AltitudesForRiseSet[idx][idxSunset]  = SunRiseSet (DatumNext(datumSunset),  lat, lng, altRiseSet, 0, bIterate, 1);
        }
        if ((altRiseSet > altitude) && (AltitudesForRiseSet[idx][idxSunset] > msecSunset)) {
          AltitudesForRiseSet[idx][idxSunset]  = SunRiseSet (DatumPrev(datumSunset),  lat, lng, altRiseSet, 0, bIterate, 1);
        }
      }
    }

    //*** noch anders gestalten:
    //       Zeiten für SA und SU getrennt einblenden
    //       evtl. "---" wenn nicht am gleichen Tag (oder anderer Text statt Beginn/Ende)
    //       kleineres "Fenster"
    strMoreRiseSet  = '<table border="1" height="85%" style="text-align:center;margin:20px;">';
    // if (bSwap) {
      // strMoreRiseSet += '<tr><td><b>Altitude</b></td><td><b>Sunset</b></td><td><b>Sunrise</b></td></tr>';
    // } else {
      // strMoreRiseSet += '<tr><td><b>Altitude</b></td><td><b>Sunrise</b></td><td><b>Sunset</b></td></tr>';
    // }

    var strSunriseInfoWin;
    var strSunsetInfoWin;
    for (var idx = AltitudesForRiseSet.length - 1; idx >= 0; idx--) {
      if (AltitudesForRiseSet[idx][idxAlt] == altitude) {
        if (wwExec.bGetSaSuInfoWin) {
          strSunriseInfoWin = wwTime.UhrzeitHtml(AltitudesForRiseSet[idx][idxSunrise] + ts, wwTime.forSaSuLong, "");
          strSunsetInfoWin  = wwTime.UhrzeitHtml(AltitudesForRiseSet[idx][idxSunset]  + ts, wwTime.forSaSuLong, "");
          continue;
        }
        //var colNight = '#002060';
        var colNight = '#001040';
        var colDay   = '#F8F8F8';
        var strSunrise = wwTime.UhrzeitHtml(msecSunrise + ts, forSaSu, "");
        var strSunset  = wwTime.UhrzeitHtml(msecSunset  + ts, forSaSu, "");
        var strSunriseHtml = '<nobr><span class="csunrs" onclick="wwExec.ToggleMoreRiseSet();return false;">&nbsp;&nbsp;'
                           + wwLang.strSA + strSunrise + '&nbsp;&nbsp;</span></nobr>';
        var strSunsetHtml  = '<nobr><span class="csunrs" onclick="wwExec.ToggleMoreRiseSet();return false;">&nbsp;&nbsp;'
                           + wwLang.strSU + strSunset + '&nbsp;&nbsp;</span></nobr>';
        if (bSetHtmlSaSu && wwParam.bShowSunRiseSet) {
          if (bSwap == 0) {
            wwTime.colTxtUhr = colNight;
            wwTime.colBgUhr  = colDay;
            $("time1").innerHTML = strSunriseHtml;
            $("time2").innerHTML = strSunsetHtml;
          } else {
            wwTime.colTxtUhr = colDay;
            wwTime.colBgUhr  = colNight;
            $("time1").innerHTML = strSunsetHtml;
            $("time2").innerHTML = strSunriseHtml;
          }
        }
        strMoreRiseSet += '<tr style="background-color:#dedede">';
        if (bSwap) {
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunset] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunset  + '</nobr></td>';
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunrise] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunrise + '</nobr></td>';
        } else {
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunrise] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunrise + '</nobr></td>';
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunset] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunset  + '</nobr></td>';
        }
        strMoreRiseSet += '</tr>';
      } else {
        if (!bSetHtmlSaSu) {
          continue;
        }
        var strSunrise = wwTime.UhrzeitHtml(AltitudesForRiseSet[idx][idxSunrise] + ts, forSaSu, "");
        var strSunset  = wwTime.UhrzeitHtml(AltitudesForRiseSet[idx][idxSunset]  + ts, forSaSu, "");
        strMoreRiseSet += '<tr>';
        if (bSwap) {
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunset] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunset  + '</nobr></td>';
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunrise] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunrise + '</nobr></td>';
        } else {
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunrise] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunrise + '</nobr></td>';
          strMoreRiseSet += '<td style="padding:5px;">' + AltitudesForRiseSet[idx][idxTxtSunset] + '</td>';
          strMoreRiseSet += '<td style="padding:5px;"><nobr>' + strSunset  + '</nobr></td>';
        }
        strMoreRiseSet += '</tr>';
      }
    }
    strMoreRiseSet += '</table>';

    if (wwExec.bGetSaSuInfoWin) {
      return ('<p>' + wwLang.strSA + strSunriseInfoWin + '</p><p>' + wwLang.strSU + strSunsetInfoWin + '</p>');
    }

    if (msecSunrise < msecSunset) {
      bSunrise = false;
      return (msecSunset);
    } else {
      bSunrise = true;
      return (msecSunrise);
    }
  }

  //-----------------------------------------------------------
  // Fenstergröße ermitteln (gleiche Funktion wie in WWLayout)
  //-----------------------------------------------------------
  var inWidth  = 0;
  var inHeight = 0;
  function GetInnerSize() {
    if (self.innerHeight) // all except Explorer
    {
      inWidth = self.innerWidth;
      inHeight = self.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
    {
      inWidth = document.documentElement.clientWidth;
      inHeight = document.documentElement.clientHeight;
    }
    else if (document.body) // other Explorers
    {
      inWidth = document.body.clientWidth;
      inHeight = document.body.clientHeight;
    }
  }

  //----------------------------
  // Anzeige SA/SU Zusatzinfos
  //----------------------------
  this.ShowMoreRiseSet = function() {
    wwLayout.WriteLog('ShowMoreRiseSet', 1);
    if (!wwParam.bShowSunRiseSet || !wwParam.bShowMoreRiseSet) {
      return;
    }
    GetInnerSize();
    var dist = Math.min(inWidth, inHeight) / 16;
    var posX = dist;
    var posY = 0;
    var extX = inWidth  - dist * 2;
    var extY = inHeight - dist * 2;
    if (self.pageYOffset) { // all except Explorer
      posY = self.pageYOffset + dist;
    }
    else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
      posY = document.documentElement.scrollTop + dist;f
    }
    else if (document.body) { // all other Explorers
      posY = document.body.scrollTop + dist;
    }
    $("RiseSet").innerHTML = '<div style="background-color:#FFFEFB; border:1px solid gray; z-index:99; position:absolute; top:'  // background-color wie in formate.css //***
                   + posY + 'px; left:' + posX + 'px; width:'
                   + extX + 'px; height:'
                   + extY + 'px; overflow:auto;">'
                   + '<a href="javascript:void(0)" onclick="this.HideMoreRiseSet();return false;">Close window</a>'
                   + '<br>' + strMoreRiseSet + '</div>';
  }

  //------------------------------
  // Ausblenden SA/SU Zusatzinfos
  //------------------------------
  this.HideMoreRiseSet = function() {
    wwLayout.WriteLog('HideMoreRiseSet', 1);
    $("RiseSet").innerHTML = "";
  }

  //=============================================
  // Sonnenauf-/untergangszeiten berechnen
  //=============================================

  //---------------------------------------------
  //
  //  The calculation is based on the formulae
  //  at the "Home Page of Paul Schlyter":
  //  http://stjarnhimlen.se/comp/ppcomp.html
  //
  //---------------------------------------------

  //----------------------------
  // Zeit in Tagen seit 0.1.2000
  //----------------------------
  function getDaynum(year, month, day, hours) { // hours mit Dezimalstellen...
  // The time scale in these formulae are counted in days. Hours, minutes, seconds are expressed as fractions of a day.
  // Day 0.0 occurs at 2000 Jan 0.0 UT (or 1999 Dec 31, 0:00 UT).
  // This "day number" d is computed as follows (y=year, m=month, D=date, UT=UT in hours+decimals):
    var daynum = 367 * year - Math.floor(7 * (year + Math.floor((month + 9) / 12)) / 4) + Math.floor(275 * month / 9) + day - 730530;
    daynum = daynum + hours / 24.0;
    return (daynum);
  }

  //----------------------------
  // RA, dec berechnen
  //----------------------------
  // Orbital elements:
  //    N = longitude of the ascending node
  //    i = inclination to the ecliptic (plane of the Earth's orbit)
  //    w = argument of perihelion
  //    a = semi-major axis, or mean distance from Sun
  //    e = eccentricity (0=circle, 0-1=ellipse, 1=parabola)
  //    M = mean anomaly (0 at perihelion; increases uniformly with time)

  var N;
  var i;
  var w;
  var a;
  var e;
  var M;

  var forSaSu = wwTime.forSaSuShort;
  var RArad;
  var decrad;
  var RA;
  var dec;

  function sunpos(year, month, day, hours) {
    var daynum = getDaynum(year, month, day, hours);

    // Orbital elements of the Sun:
    N  = 0.0;
    i  = 0.0;
    w  = 282.9404 + 4.70935E-5 * daynum;
    a  = 1.000000;             // (AU)  // One Astronomical Unit (AU) is the Earth's mean distance to the Sun, or 149.6 million km
    e  = 0.016709 - 1.151E-9 * daynum;
    M  = 356.0470 + 0.9856002585 * daynum;
    M = ReduceToRangeDeg(M);

    /*
    // Orbital elements of the Moon:
    N = 125.1228 - 0.0529538083 * daynum;
    i = 5.1454;
    w = 318.0634 + 0.1643573223 * daynum;
    a = 60.2666;               // (Earth radii)
    e = 0.054900;
    M = 115.3654 + 13.0649929509 * daynum;
    M = ReduceToRangeDeg(M);
    */

    // obliquity of the ecliptic, i.e. the "tilt" of the Earth's axis of rotation (currently ca 23.4 degrees and slowly decreasing)
    var ecl = 23.4393 - 0.0000003563 * daynum;    // 3.563E-7 * d

    var ea = M + e * (180 / Math.PI) * sind(M) * (1.0 + e * cosd(M)); // ea: eccentric anomaly
    ea = ReduceToRangeDeg(ea);

    var xv = cosd(ea) - e;
    var yv = Math.sqrt(1.0 - e * e) * sind(ea);

    var v = (180 / Math.PI) * Math.atan2(yv, xv);           // true anomaly v
    var r = Math.sqrt(xv * xv + yv * yv); // Sun's distance r

    // Sun's true longitude:
    var lonsun = v + w;
    lonsun = ReduceToRangeDeg(lonsun);

    // Convert lonsun,r to ecliptic rectangular geocentric coordinates xs,ys:
    var xs = r * cosd(lonsun);
    var ys = r * sind(lonsun);
    // (since the Sun always is in the ecliptic plane, zs is of course zero).
    // xs,ys is the Sun's position in a coordinate system in the plane of the ecliptic.
    // To convert this to equatorial, rectangular, geocentric coordinates, compute:
    var xe = xs;
    var ye = ys * cosd(ecl);
    var ze = ys * sind(ecl);

    RArad  = Math.atan2(ye, xe);                            // Sun's Right Ascension (radiant)
    decrad = Math.atan2(ze, Math.sqrt(xe * xe + ye * ye));  // declination (radiant)

    RA  = (180 / Math.PI) * RArad;
    dec = (180 / Math.PI) * decrad;
  }

  //----------------------------------------
  // Zentrum für die Nachtanzeige berechnen
  //----------------------------------------
  function LatLng() {
    this.lat = 0;
    this.lng = 0;
  }

  this.NightCenter = function() {
    var now = new Date();
    var msecMaptime = now.getTime() + wwParam.msecDiff; // msecDiff: Zeitverschiebung durch Parameter beim Aufruf der Seite
    var maptime     = new Date(msecMaptime);
    var msecSunRise = SunRiseSet(maptime, 0, 0, this.hSunRiseSet, true,  true, 1);
    var msecSunSet  = SunRiseSet(maptime, 0, 0, this.hSunRiseSet, false, true, 1);

    // Mittag für die Koordinaten (0,0):
    var msecNoon = (msecSunRise + msecSunSet) / 2;
    var msecDiffFromNoon = msecNoon - msecMaptime;
    var hoursDiffFromNoon = msecDiffFromNoon / (1000.0 * 60.0 * 60.0);
    // Verschiebung gegenüber den Koordinaten (0,0):
    var center = new LatLng();
    center.lng = hoursDiffFromNoon * 15.0 + 180; // 15° je Stunde
    center.lng = ((center.lng > 360) ? center.lng - 360 : center.lng);
    center.lat = - dec;
    return center;
  }

  //----------------------------------------
  // Sonnenauf-/untergangzeiten
  // (in Millisekunden seit dem 01.01.1970)
  //----------------------------------------
  var bNeverRise = false;
  var bNeverSet  = false;
  var saveUT = 999;

  function SunRiseSet(datum, lat, lng, h, bRise, bIterate, itCount) {
    var year    = datum.getUTCFullYear();
    var month   = datum.getUTCMonth() + 1;
    var day     = datum.getUTCDate();
    var minDez  = datum.getUTCMinutes() / 60;   // Dezimalstellen für Stundenangabe
    var secDez  = datum.getUTCSeconds() / 3600; // Dezimalstellen für Stundenangabe
    var hours   = datum.getUTCHours() + minDez + secDez; // Stunden mit Dezimalstellen

    if (bIterate && itCount > 1) {
      sunpos(year, month, day, hours); // GMST0 für die eingegebene Tageszeit
    } else {
      sunpos(year, month, day, 12); // "GMST0 should also be computed at noon local time" -> hours = 12
    }

    var L = M + w;
    L = ReduceToRangeDeg(L);
    var GMST0 = L + 180;
    GMST0 = ReduceToRangeDeg(GMST0);

    var UT_Sun_in_south = ReduceToRangeDeg(RA - GMST0 - lng) / 15.0;
    var cosLHA = (sind(h) - sind(lat) * sind(dec)) / (cosd(lat) * cosd(dec));

    var LHA = 0;
    var datum1 = new Date();
    if (cosLHA < -1) {
      // the sun never rises on this location on the specified date
      if (!bNeverSet) {
        bNeverRise = true;
        forSaSu = wwTime.forSaSuLong;
        if (bRise == 1) {
          var msecNew = datum.getTime() - msecPerDay;
          datum1.setTime(msecNew);
          return (SunRiseSet(datum1, lat, lng, h, bRise, bIterate, itCount));
        } else {
          var msecNew = datum.getTime() + msecPerDay;
          datum1.setTime(msecNew);
          return (SunRiseSet(datum1, lat, lng, h, bRise, bIterate, itCount));
        }
      }
      else {
        forSaSu = wwTime.forSaSuDayOnly;
        return (Date.UTC(year, month - 1, day, 12, 00, 00));
      }
    } else if (cosLHA > 1) {
      // the sun never sets on this location on the specified date
      if (!bNeverRise) {
        bNeverSet = true;
        forSaSu = wwTime.forSaSuLong;
        if (bRise == 1) {
          var msecNew = datum.getTime() + msecPerDay;
          datum1.setTime(msecNew);
          return (SunRiseSet(datum1, lat, lng, h, bRise, bIterate, itCount));
        } else {
          var msecNew = datum.getTime() - msecPerDay;
          datum1.setTime(msecNew);
          return (SunRiseSet(datum1, lat, lng, h, bRise, bIterate, itCount));
        }
      }
      else {
        forSaSu = wwTime.forSaSuDayOnly;
        return (Date.UTC(year, month - 1, day, 12, 00, 00));
      }
    } else {
      LHA = (180 / Math.PI) * Math.acos(cosLHA); // Sun's Local Hour Angle
    }

    var hoursLHA;
    if (bIterate) {
      hoursLHA = LHA / 15.04107;
    } else {
      hoursLHA = LHA / 15;
    }
    var UT;

    if (bRise) {
      UT = UT_Sun_in_south - hoursLHA;
    } else {
      UT = UT_Sun_in_south + hoursLHA;
    }

    while (UT >= 24) {
      UT -= 24;
    }
    while (UT < 0) {
      UT += 24;
    }
    if (Math.abs(UT - saveUT) >= 0.1) {
      saveUT = UT;
    } else {
      bIterate = false;
    }

    var rsHours   = Math.floor(UT);
    var rsMinutes = Math.round(60 * (UT - rsHours));

    if (bIterate && itCount < 50) {
      itCount++;
      return (SunRiseSet(new Date (Date.UTC(year, month - 1, day, rsHours, rsMinutes, 00)), lat, lng, h, bRise, bIterate, itCount));
    } else {
      return (Date.UTC(year, month - 1, day, rsHours, rsMinutes, 00));
    }
  }

  //----------------------------
  // Umrechnungsfunktionen
  //----------------------------
  function sind(deg) {
    return (Math.sin(deg * Math.PI / 180));
  }

  function cosd(deg) {
    return (Math.cos(deg * Math.PI / 180));
  }

  function ReduceToRangeDeg(val) {
    return (val - Math.floor(val / 360.0) * 360.0); // 0 <= val < 360
  }

}

var wwSun = new WWSun();

