// date ist der Array der Name-/Datum-Paare
var date = new Array();

function addEntry(name,timePlace) {
  var x = {};
  x.name = name;
  x.timePlace = timePlace;
  date.push(x);
  }
  
  
// Javascript zur Berechnung der fälligen Geburtstage
var horizon = 30;     
var now = new Date();     

// Ist der zum timePlace-String tp gehörende Geburtstag
// in den nächsten horizon Tagen fällig?
function isDue(tp) {     
  var x,y,z;     
  // Datumsmuster erkennen
  z = tp.match(/\s*(\d{1,2})\.(\d{1,2})\.(\d{1,4})/);     
  if (z) {     
    // Datum zu Monat, Tag und aktuellem Jahr bilden
    x = new Date( now.getFullYear(), RegExp.$2-1, RegExp.$1 ); 
    // Differenz zur aktuellen Zeit von msec in Tage umrechnen
    y = (x.getTime()-now.getTime())/86400000;     
    // Negative Differenz, dann mit nachfolgendem Jahr versuchen
    if (y < -1) {
      y += 365;
      // 1 Jahr vor dem Schaltjahr und in jan/feb des Schaltjahrs
      // ist der nächste Geburtstag nicht 365, sondern 366 Jahre 
      // entfernt
      if ((x.getFullYear() + (x.getMonth()<2) ? 0 : 1) % 4 == 0) y++;
      }
    if ((y>=-1) && (y<horizon)) return x;     
    }     
  return null;     
  }     

function birthdates(iHorizon) {     
  var x,d;     
  var found=false;     
  if (typeof(iHorizon)!="undefined") horizon = iHorizon;     
  document.write( "<h1>Geburtstage in den n&auml;chsten " + horizon + " Tagen</h1>");     
  for (i=0;i<date.length;i++) {     
    d = date[i];     
    if ((x=isDue(d.timePlace)) != null) {     
      if (!found) document.write("<table>\n");     
      found = true;     
      if ((now.getDate()==x.getDate())&&(now.getMonth()==x.getMonth()))     
        document.write( "<tr style='font-weight:bold;color:red'><td><i>" + d.name + "</i></td><td>hat heute Geburtstag !!!</td></tr>\n");     
      else     
        document.write( "<tr><td><i>" + d.name + "</i></td><td>hat am</td><td><b>"     
                       + x.getDate()+"."+(x.getMonth()+1) + ".</b> Geburtstag</td></tr>\n");     
      }     
    }     
    if (found) document.write( "</table>" );     
    else document.write( "In den n&auml;chsten <b>" + horizon +  "</b> Tagen wurde kein Geburtstag in der Geburtstagsliste gefunden.");     
  }     

// Favoriten, denen die Ehre zuteil wird,
// als Hyperlink zu erscheinen
function favorites() {
for (i = 0; i < arguments.length; i++)
  document.write( '\n<a href="javascript:document.Horoskop.setTimePlaceOut('
   + "'now'" +  '); document.Horoskop.setTimePlace('
   + "'" + date[arguments[i]].timePlace + "'"
   + ');">'
   + date[arguments[i]].name
   + '</a><br>');
}
