var twAngle = -6.0; 
var srAngle = -35.0/60.0;

//  "sommertid" - Copyright by erik@kaagaard.dk ved fejl indsæt sol2old.js
var now = new Date();

//  sommertid data beregning
 calendar = new Date();
 day = calendar.getDay();
 month = calendar.getMonth();
 date = calendar.getDate();
 year = calendar.getYear();
 if (year < 1000)
 year+=1900
 cent = parseInt(year/100);
 g = year % 19;
 k = parseInt((cent - 17)/25);
 i = (cent - parseInt(cent/4) - parseInt((cent - k)/3) + 19*g + 15) % 30;
 i = i - parseInt(i/28)*(1 - parseInt(i/28)*parseInt(29/(i+1))*parseInt((21-g)/11));
 j = (year + parseInt(year/4) + i + 2 - cent + parseInt(cent/4)) % 7;
 l = i - j;
 emonth = 3 + parseInt((l + 40)/44);
 emonth1 = 3 + parseInt((l + 89)/44);
 emonth2 = 3 + parseInt((l + 56)/44);
 edate = l + 28 - 31*parseInt((emonth/4));
 edate1 = l + 17 - 31*parseInt((emonth1/4));
 edate2 = l + 28 - 31*parseInt((emonth2/4));
 emonth--;
 // Sommertid
 if ((month > 1) && (day > -1) && (date > 24)) s=2;
 if ((month > 2)) s=2;
 if ((month > 8) && (day > -1) && (date > 24)) s=1;
 if ((month > 9)) s=1;
//Slut sommertid data beregning -->

var sRiseT; 
var sSetT;
var srStatus;
var twStartT;
var twEndT;
var twStatus;
var sDIST; 
var sRA; 
var sDEC;
var sLON;
function dayDiff2000(y,m,d)
{
  return (367.0*(y)-((7*((y)+(((m)+9)/12)))/4)+
          ((275*(m))/9)+(d)-730530.0);
}
var RADEG = 180.0 / Math.PI
var DEGRAD = Math.PI / 180.0
function sind(x) { return Math.sin((x)*DEGRAD); }
function cosd(x) { return Math.cos((x)*DEGRAD); }
function tand(x) { return Math.tan((x)*DEGRAD); }

function atand(x) { return (RADEG*Math.atan(x)); }
function asind(x) { return (RADEG*Math.asin(x)); }
function acosd(x) { return (RADEG*Math.acos(x)); }
function atan2d(y,x)
{
  var at2 = (RADEG*Math.atan(y/x));
  if( x < 0 && y < 0)
    at2 -= 180;
  else if( x < 0 && y > 0)
    at2 += 180;
  return at2;
}
function sunRiseSet(year,month,day,lat,lon)
{
  return ( sunTimes( year, month, day, lat, lon, srAngle, 1) )
}
function civTwilight(year,month,day,lat,lon)
{
  return ( sunTimes( year, month, day, lat, lon, twAngle, 0) )
}
function sunTimes(year, month, day, lat, lon, altit, sUppLimb)
{
  var dayDiff 
  var sRadius
  var diuArc
  var sSouthT
  var locSidT
  var stCode = 0     
  dayDiff = dayDiff2000(year,month,day) + 0.5 - lon/360.0;
  locSidT = revolution( GMST0(dayDiff) + 180.0 + lon );
  sunRaDec( dayDiff );
  sSouthT = 12.0 - rev180(locSidT - sRA)/15.0;
  sRadius = 0.2666 / sDIST;
  if ( sUppLimb != 0) 
    altit -= sRadius;
  {
     var cost;
     cost = ( sind(altit) - sind(lat) * sind(sDEC) ) /
             ( cosd(lat) * cosd(sDEC) );
     if ( cost >= 1.0 )
     {
       stCode = -1;
       diuArc = 0.0;
     }
     else if ( cost <= -1.0 )
     {
       stCode = 1;
       diuArc = 12.0; 
     }
     else
       diuArc = acosd(cost)/15.0;
  }
  if ( sUppLimb != 0) 
  {
    sRiseT = sSouthT - diuArc;
    if(sRiseT < 0) 
      sRiseT += 24; 
    sSetT  = sSouthT + diuArc;
    if(sSetT > 24)        // Sunset next day
      sSetT -= 24;
    srStatus = stCode;
  }
  else                      // For twilight times
  {
    twStartT = sSouthT - diuArc;
    if(twStartT < 0)
      twStartT += 24;      
    twEndT  = sSouthT + diuArc;
    if(twEndT > 24)
      twEndT -= 24;
    twStatus = stCode;
  }
}
function sunRaDec(dayDiff)
{
  var eclObl;
  var x;
  var y;
  var z;
  sunPos( dayDiff );
  x = sDIST * cosd(sLON);
  y = sDIST * sind(sLON);
  eclObl = 23.4393 - 3.563/10000000 * dayDiff;
  z = y * sind(eclObl);
  y = y * cosd(eclObl);
  sRA = atan2d( y, x );
  sDEC = atan2d( z, Math.sqrt(x*x + y*y) );
}
function sunPos(dayDiff)
{
  var M; 
  var w;
  var e; 
  var eAN; 
  var x;
  var y;
  var v; 
  M = revolution( 356.0470 + 0.9856002585 * dayDiff );
  w = 282.9404 + 4.70935/100000 * dayDiff;
  e = 0.016709 - 1.151/1000000000 * dayDiff;
  eAN = M + e * RADEG * sind(M) * ( 1.0 + e * cosd(M) );
  x = cosd(eAN) - e;
  y = Math.sqrt( 1.0 - e*e ) * sind(eAN);
  sDIST = Math.sqrt( x*x + y*y );
  v = atan2d( y, x ); 
  sLON = v + w; 
  if ( sLON >= 360.0 )
    sLON -= 360.0;
}
var INV360 = 1.0 / 360.0;
function revolution( x )
{
  return (x - 360.0 * Math.floor( x * INV360 ));
}
function rev180( x )
{
  return ( x - 360.0 * Math.floor( x * INV360 + 0.5 ) );
}
function GMST0( dayDiff )
{
  var const1 = 180.0 + 356.0470 + 282.9404;
  var const2 = 0.9856002585 + 4.70935/100000; 
  return ( revolution( const1 + const2 * dayDiff ) );     
} 
function checkInt(item, min, max, bText, lCode)
{
  var checkVal = parseInt(item.value)
  var returnVal = false
  var aText1 = "Enter a value"
  var aText2 = "Enter a value >= " + min
  var aText3 = "Enter a value <= " + max
  if(lCode == 1)
  {
    aText1 = "Enter a value"
    aText2 = "Enter a value >= " + min
    aText3 = "Enter a value <= " + max
  }
  if ( isNaN(checkVal) ) 
     alert(bText + ":\n" + aText1)
  else if (checkVal < min) 
    alert(bText + ":\n" + aText2)
  else if (checkVal > max) 
    alert(bText + ":\n" + aText3)
  else 
    returnVal = true
  return returnVal 
}
function checkFloat(item, min, max, bText, lCode)
{
  var checkVal = parseFloat(item.value)
  var returnVal = false

  var aText1 = "Enter a value"
  var aText2 = "Enter a value >= " + min
  var aText3 = "Enter a value <= " + max
  if(lCode == 1)
  {
    aText1 = "Enter a value"
    aText2 = "Enter a value >= " + min
    aText3 = "Enter a value <= " + max
  }
  if ( isNaN(checkVal) ) 
      alert(bText + ":\n" + aText1)
  else if (checkVal < min) 
      alert(bText + ":\n" + aText2)
  else if (checkVal > max) 
      alert(bText + ":\n" + aText3)
  else 
      returnVal = true
  return returnVal 
} 
function formValues(form, lCode)
{
  var latText = "Latitude"
  var lonText = "Longitude"
  var yearText = "Year"
  var monthText = "Month"
  var dayText = "Date"
  if(lCode == 1)
  {
    latText = "Latitude"
    lonText = "Longitude"
    yearText = "Year"
    monthText = "Month"
    dayText = "Day"
  }
  if( !checkFloat(form.inpLat, -90.0, 90.0, latText, lCode) )
    return  
  var lat = parseFloat(form.inpLat.value)
  var absLat = Math.abs(lat)
  if( !checkFloat(form.inpLon, -180.0, 180.0, lonText, lCode) )
    return 
  var lon = parseFloat(form.inpLon.value)
  var absLon = Math.abs(lon)
  if( !checkInt(form.inpYear, 1901, 2099, yearText, lCode) )
    return   
  var year = parseInt(form.inpYear.value)
  if( !checkInt(form.inpMonth, 1, 12, monthText, lCode) )
    return 
  var month = parseInt(form.inpMonth.value)
  var monthMax
  if(month == 2 && (year % 4) == 0)
    monthMax = 29
  else if(month == 2) 
    monthMax = 28
  else if( (month == 4) || (month == 6) || (month == 9) ||
           (month == 11) ) 
    monthMax = 30
  else
    monthMax = 31
  if( !checkInt(form.inpDay, 1, monthMax, dayText, lCode) )
    return    
  var day = parseInt(form.inpDay.value) 
  sunRiseSet(year,month,day,lat,lon);
  civTwilight(year,month,day,lat,lon);
  var resultText = ""
  var twsText = "Twilight starts: "
  var tweText = "Twilight ends: "
  var twAllText = "Twilight all night"
  var twNoText = "No Twilight today"
  var srText = "Sunrise: "
  var ssText = "Sunset: "
  var sAllText = "Sun is up 24 hours"
  var sNoText = "Sun is down 24 hours"
  if(lCode == 1)
  {
    twsText = "Dawn: "
    tweText = "Twilight: "
    twAllText = "Dawn/Twilight\nall night"
    twNoText = "No Dawn/Twilight\ntoday"
    srText = "Sunrise: "
    ssText = "Sunset: "
    sAllText = "Sun is up 24 hours."
    sNoText = "Sun is down 24 hours."
  }
  resultText += absLat
  if(lat < 0)
    resultText += "S "
  else
    resultText += "N "
  resultText += absLon
  if(lon < 0)
    resultText += "W\n"
  else
    resultText += "E\n"
  resultText += year + "-"
  if(month < 10)
    resultText += "0"
  resultText += month + "-"
  if(day < 10)
    resultText += "0"
  resultText += day + "\n"
  var twst_h = Math.floor(twStartT)
  var twst_m = Math.floor((twStartT - twst_h)*60)
  var sris_h = Math.floor(sRiseT)
  var sris_m = Math.floor((sRiseT - sris_h)*60)
  var sset_h = Math.floor(sSetT)
  var sset_m = Math.floor((sSetT - sset_h)*60)
  var twen_h = Math.floor(twEndT)
  var twen_m = Math.floor((twEndT - twen_h)*60)
  if(twStatus == 0)
  {
    resultText += twsText
    if(twst_h < 10)
      resultText += "0"
    resultText += twst_h + "."
    if(twst_m < 10)
      resultText += "0"
    resultText += twst_m + "\n"
  }
  else if(twStatus > 0 && srStatus <= 0)
  {
    resultText += twAllText + "\n"
  }
  else
  {
    resultText += twNoText + "\n"
  }
  if(srStatus == 0)
  {
    resultText += srText 
    if(sris_h < 10)
      resultText += "0"
    resultText += sris_h + "."
    if(sris_m < 10)
      resultText += "0"
    resultText += sris_m + "\n"   
    resultText += ssText
    if(sset_h < 10)
      resultText += "0"
    resultText += sset_h + "."
    if(sset_m < 10)
      resultText += "0"
    resultText += sset_m + "\n"
  }
  else if(srStatus > 0)
  {
    resultText += sAllText + "\n"
  }
  else
  {
    resultText += sNoText + "\n"
  }
  if(twStatus == 0)
  {
    resultText += tweText
    if(twen_h < 10)
      resultText += "0"
    resultText += twen_h + "."
    if(twen_m < 10)
      resultText += "0"
    resultText += twen_m
  }
  form.outpResult.value = resultText
}  
function toDayValues(name, lat, lon, lCode)
{
  toDay = new Date();
  var year = toDay.getYear();
  if (year < 100)
    year += 1900;
  var month = (toDay.getMonth() + 1);
  var day =  toDay.getDate();
  sunRiseSet(year,month,day,lat,lon);
  civTwilight(year,month,day,lat,lon);
  showTable(name, lat, lon, year, month, day, lCode);
}
function showTable(name, lat, lon, year, month, day, lCode)
{
  var absLat = Math.abs(lat)
  var absLon = Math.abs(lon)
  document.write("<TABLE BORDER=0 WIDTH='70' height='58' style='font-size: 10; font-style: normal; font-weight: bold; font-family: Arial, Helvetica, sans-serif;'>");
  document.write("<TR><TD> <font color='blue'> ");
  document.write("" + name + "");
  if(day < 10)
    document.write(" ");
  var twsText = "";
  var tweText = "";
  var twAllText = "Lyse nætter"
  var twNoText = "";
  var srText = "</font><font color='black'>Sol op  "
  var ssText = "<br>Solned "
  var sAllText = "Sol er oppe 24 timer"
  var sNoText = "Sol er nede 24 timer"
  var twst_h = Math.floor(twStartT)
  var twst_m = Math.floor((twStartT - twst_h)*60)
  var sris_h = Math.floor(sRiseT)
  var sris_m = Math.floor((sRiseT - sris_h)*60)
  var sset_h = Math.floor(sSetT)
  var sset_m = Math.floor((sSetT - sset_h)*60)
  var twen_h = Math.floor(twEndT)
  var twen_m = Math.floor((twEndT - twen_h)*60)
  if(twStatus == 0)

  if(srStatus == 0)
  {
    document.write(srText)
    if(sris_h < 10)
      document.write("0")
    document.write(sris_h + s + ".") //  1 + = Danmark og 2 + = sommertid -->
    if(sris_m < 10)
      document.write("0")
    document.write(sris_m)  
    document.write(ssText)
    if(sset_h < 10)
      document.write("0")
    document.write(sset_h + s + ".") //  1 + = Danmark og 2 + = sommertid -->
    if(sset_m < 10)
      document.write("0")
    document.write(sset_m)
  }

  else if(srStatus > 0)
  {
    document.write(sAllText)
  }
  else
  {
    document.write(sNoText)
  }
  if(twStatus == 0)
  {


    document.write("</TD></TR>")
    }
  document.write("</TABLE>")
}
