//<![CDATA[
/*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
copyrights: "COPYRIGHT 2004-2009 BY B. DIETSCHWEILER - WWW.DICON.CH - ALL RIGHTS RESERVED"
domain: "www.dicon.ch" // To be used on the domain www.dicon.ch only!
PLEASE DO NOT CHANGE OR COPY THIS CODE IN ANY WAY!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
*/
//^^^^^^^ GET YEAR ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

function getFullYear(now) {var year = now.getYear();
	if (year==0) {year=2000};
	if (year<1900) {year=year+1900};
	return year; }

	var now=new Date();
	// Read the variable of the referring document
	var die_url = window.location.href;
	var year = die_url.substring(die_url.indexOf("?")+1,die_url.length);
	if (year>1900 && year <2100){}
	else {year = getFullYear(now)};


//^^^^^^^START MOON CODE WALKER (BASIC CODE BY JOHN WALKER CH - Thanks John!)^^^^^^^^^^^^

/*  JYEAR  --  Convert  Julian  date  to  year,  month, day, which are
               returned as an Array.  */

function jyear(td) {
    var z, f, a, alpha, b, c, d, e, mm, dw;

    dw=Math.floor(td+1.5)-7*Math.floor((td+1.5)/7);
    td += 0.5;
    z = Math.floor(td);
    f = td - z;


    if (z < 2299161.0) {
        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);
    mm = Math.floor((e < 14) ? (e - 1) : (e - 13));


    return new Array(
                     Math.floor((mm > 2) ? (c - 4716) : (c - 4715)),
                     mm,
                     Math.floor(b - d - Math.floor(30.6001 * e) + f), dw);
    }

/*  JHMS  --  Convert Julian time to hour, minutes, and seconds,
              returned as a three-element array.  */

function jhms(j) {
    var ij;

    j += 0.5;                 /* Astronomical to civil */
    ij = (j - Math.floor(j)) * 86400.0;
    return new Array(
                     Math.floor(ij / 3600),
                     Math.floor((ij / 60) % 60),
                     Math.floor(ij % 60));
    }

/*  DTR  --  Degrees to radians. */

function dtr(d)
    {
    return (d * Math.PI) / 180.0;
    }
    
function crp()  {
	 var z=0, meta3 = document.getElementsByTagName("meta")[3].content.length,
        cr3 = document.getElementsByTagName("meta")[3].content;	 
	 if (meta3 == 76) {z++}
	 if (cr3 == copyrights) {z++}
	 if (domain == self.location.hostname) {z++}
	 return z;
	 }

/*  PAD  --  Pad a string to a given length with a given fill character. */

function pad(str, howlong, padwith) {
    var s = str.toString();

    while (s.length < howlong) {
        s = padwith + s;
    }
    return s;
  }


//  EDATE YEAR  --  Edit date and time to application specific format.
function edate(j) {
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
var Months = new Array( "Jan", "Feb", "Mrz", "Apr", "Mai", "Jun",
                        "Jul", "Aug", "Sep", "Okt", "Nov", "Dez" );
var wday = new Array( "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    var date, time, sd, tzo, tzk;

    j += (30.0 / (24 * 60 * 60));     // Round to nearest minute
    Udate = jyear(j);
    Utime = jhms(j);
    sd	= new Date((Udate[0]),(Udate[1]-1),(Udate[2]),(Utime[0]),(Utime[1]));
    tzo  = sd.getTimezoneOffset();
    tzk  = -1/1440*tzo;
    j +=	tzk;
    date = jyear(j);
    time = jhms(j);


   if (date[0] == year && crp() == 3) {

	return  wday[date[3]]+ " " + pad(date[2], 2, "0") + ". " +Months[date[1] - 1] +
	" " + date[0] + " " +  pad(time[0], 2, "0") + ":" + pad(time[1], 2, "0") + " Uhr";
	} else {return "";}
   }

//  EDATE NEXT PHASE  --  Edit date and time to application specific format.
function edateN(j) {
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
var Months = new Array( "Jan", "Feb", "Mrz", "Apr", "Mai", "Jun",
                        "Jul", "Aug", "Sep", "Okt", "Nov", "Dez" );
var wday = new Array( "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag",
		      "Freitag", "Samstag");
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    var date, time, sd, tzo, tzk;

    j += (30.0 / (24 * 60 * 60));     // Round to nearest minute
    Udate = jyear(j);
    Utime = jhms(j);
    sd	= new Date((Udate[0]),(Udate[1]-1),(Udate[2]),(Utime[0]),(Utime[1]));
    tzo  = sd.getTimezoneOffset();
    tzk  = -1/1440*tzo;
    j +=	tzk;
    date = jyear(j);
    time = jhms(j);

   if (crp() == 3) {

	return  wday[date[3]]+ "<br />" + pad(date[2], 2, "0") + ". " +Months[date[1] - 1] +
	" " + date[0] + "<br />" +  pad(time[0], 2, "0") + ":" + pad(time[1], 2, "0") + " Uhr";
	} else {return "";}
   }


/*  TRUEPHASE  --  Given a K value used to determine the mean phase of
                   the new moon, and a phase selector (0.0, 0.25, 0.5,
                   0.75), obtain the true, corrected phase time.  */

function dsin(x) {
    return Math.sin(dtr(x));
}

function dcos(x) {
    return Math.cos(dtr(x));
}

function truephase(k, phase) {
    var t, t2, t3, pt, m, mprime, f,
        SynMonth = 29.53058868;     /* Synodic month (mean time from new to next new Moon) */

    k += phase;                     /* Add phase to new moon time */
    t = k / 1236.85;                /* Time in Julian centuries from
                                       1900 January 0.5 */
    t2 = t * t;                     /* Square for frequent use */
    t3 = t2 * t;                    /* Cube for frequent use */
    pt = 2415020.75933              /* Mean time of phase */
         + SynMonth * k
         + 0.0001178 * t2
         - 0.000000155 * t3
         + 0.00033 * dsin(166.56 + 132.87 * t - 0.009173 * t2);

    m = 359.2242                    /* Sun's mean anomaly */
        + 29.10535608 * k
        - 0.0000333 * t2
        - 0.00000347 * t3;
    mprime = 306.0253               /* Moon's mean anomaly */
        + 385.81691806 * k
        + 0.0107306 * t2
        + 0.00001236 * t3;
    f = 21.2964                     /* Moon's argument of latitude */
        + 390.67050646 * k
        - 0.0016528 * t2
        - 0.00000239 * t3;
    if ((phase < 0.01) || (Math.abs(phase - 0.5) < 0.01)) {

       /* Corrections for New and Full Moon */

       pt +=     (0.1734 - 0.000393 * t) * dsin(m)
                + 0.0021 * dsin(2 * m)
                - 0.4068 * dsin(mprime)
                + 0.0161 * dsin(2 * mprime)
                - 0.0004 * dsin(3 * mprime)
                + 0.0104 * dsin(2 * f)
                - 0.0051 * dsin(m + mprime)
                - 0.0074 * dsin(m - mprime)
                + 0.0004 * dsin(2 * f + m)
                - 0.0004 * dsin(2 * f - m)
                - 0.0006 * dsin(2 * f + mprime)
                + 0.0010 * dsin(2 * f - mprime)
                + 0.0005 * dsin(m + 2 * mprime);
    } else if ((abs(phase - 0.25) < 0.01 || (abs(phase - 0.75) < 0.01))) {
       pt +=     (0.1721 - 0.0004 * t) * dsin(m)
                + 0.0021 * dsin(2 * m)
                - 0.6280 * dsin(mprime)
                + 0.0089 * dsin(2 * mprime)
                - 0.0004 * dsin(3 * mprime)
                + 0.0079 * dsin(2 * f)
                - 0.0119 * dsin(m + mprime)
                - 0.0047 * dsin(m - mprime)
                + 0.0003 * dsin(2 * f + m)
                - 0.0004 * dsin(2 * f - m)
                - 0.0006 * dsin(2 * f + mprime)
                + 0.0021 * dsin(2 * f - mprime)
                + 0.0003 * dsin(m + 2 * mprime)
                + 0.0004 * dsin(m - 2 * mprime)
                - 0.0003 * dsin(2 * m + mprime);
       if (phase < 0.5)
          /* First quarter correction */
          pt += 0.0028 - 0.0004 * dcos(m) + 0.0003 * dcos(mprime);
       else
          /* Last quarter correction */
          pt += -0.0028 + 0.0004 * dcos(m) - 0.0003 * dcos(mprime);
    	}
    return pt;
    }
    
//^^^^ (SPLITTED FIRST PART OF THE ORIGINAL GEN-CODE)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    var v, sk, kr, l, s, Itemlen = 36,
        dat, evt, m = 0, epad, pchar, phnear,
        pmin = Number.MAX_VALUE, pminx = 0,
        pmax = Number.MIN_VALUE, pmaxx = 0,
        yrange, centile, TOLERANCE = 0.01, k1, mtime, minx, phaset,
        Pitemlen = 30; //alert(meta3+" *** "+cr3);
        
    sk = Math.floor((year - 1999.97) * 13.2555);
    dat = new Array();
    evt = new Array();
    phaset = new Array();

    //  Tabulate new and full moons surrounding the year

    k1 = Math.floor((year - 1900) * 12.3685) - 4;
    minx = 0;
    for (l = 0; true; l++) {
        mtime = truephase(k1, (l & 1) * 0.5);
        date = jyear(mtime);
        if (date[0] >= year) {
            minx++;
        }
        phaset[minx] = mtime * ((l & 1) == 0 ? -1 : 1);
        if (date[0] > year) {
            minx++;		// for the first phase of the new year
            break;
         }
        k1 += l & 1;
     }
    
//^^^^ END OF MOON CODE WALKER - again, thank you John! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//]]>