
/* 
  kalender v1.22
*/

// voorkeur instellingen:
// ----------------------

// Tekst die voor de maandnaam verschijnt:
   var maandTxt = "Kalender: ";  // "tekst" of ""
  
// Tekst die bij de huidige datum verschijnt:
   var VandaagTxt = "Nu";  // "tekst" of ""

// Tekst in button voor ga
   var GoTxt="Ga"; // "tekst"
   
// Tekst in button voor vandaag
   var TodayTxt="Nu"; // "tekst"
   
// Weeknummers vermelden:
   var Weeknrs = true; // true/false of 1/0

// Jaarlijks terugkerende feestdagen/evenementen toevoegen en berekenen:
   var Feestdgn = true; // true/false of 1/0

// -----------------------
// hieronder niet wijzigen
// -----------------------

// preload images
var imgUp      = new Image(14,14); imgUp.src      = '/vooruit.gif';
var imgDown    = new Image(14,14); imgDown.src    = '/terug.gif';
var imgvandaag = new Image(14,14); imgvandaag.src = '/images/vandaag.gif';

// globale variabelen
var today     = new Date();
var dag       = String(today.getDate());if(dag.length < 2){dag="0"+dag};
var maand     = String(today.getMonth());if(maand.length < 2){maand="0"+maand};
var jaar      = String(today.getFullYear());
var vandaag   = Number(jaar+maand+dag);
var dezemaand = today.getMonth();    // nodig om bij aanroep de huidige maand en 
var ditjaar   = today.getFullYear(); // het huidige jaar door te kunnen geven

  function info(Sdatum,Somschr,Sklasse){
   this.Sdatum=Sdatum;
   this.Somschr=Somschr;
   this.Sklasse=Sklasse;
  }
  var Speciaal = new Array();

var monthName=new Array();
monthName[0] ="Januari";
monthName[1] ="Februari";
monthName[2] ="Maart";
monthName[3] ="April";
monthName[4] ="Mei";
monthName[5] ="Juni";
monthName[6] ="Juli";
monthName[7] ="Augustus";
monthName[8] ="September";
monthName[9] ="Oktober";
monthName[10]="November";
monthName[11]="December";

var dayName = new Array();
dayName[0]="zo";
dayName[1]="ma";
dayName[2]="di";
dayName[3]="wo";
dayName[4]="do";
dayName[5]="vr";
dayName[6]="za";

  function daysInMonth(month, year){
	  if(month == 2)
	  	return 28 + leap(year);
  	else if(month == 4 || month == 6 || month == 9 || month == 11)
  	   return 30;
  	else
  		return 31;
  }
  function leap(y) {
	  return ((y % 400 == 0) || (y % 100 != 0 && y % 4 == 0));
  }

	function WeekNr(n) {
    // berekent het weeknummer op datum n
		var P3D=259200000, P7D=604800000, y=n.getYear(), y=(y<1000?1900+y:y);
		var s=Math.floor((Date.UTC(y,n.getMonth(),n.getDate())+P3D)/P7D);
		tmp=new Date(s*P7D); j=tmp.getYear(); j=(j<1000?1900+j:j);
		return 1+s-Math.floor((Date.UTC(j,0,4)+P3D)/P7D)
	}
  
  function writeString( text ) {
    if( document.getElementById ) {
      document.getElementById( 'container' ).innerHTML = text;
    } 
    else if( document.all ) {
      document.all['container'].innerHTML = text;
    }
    else {
      document['container'].document.open();
      document['container'].document.write( text );
      document['container'].document.close();
    }
  }

  function changeJaar(incr){
    (incr==1)?buffyear++:buffyear--;
    kalender(buffyear,buffmonth);
  }

  function changeMaand(incr){
    if (buffmonth==11 && incr==1){
      buffmonth = 0;
      buffyear++;
    } else {
      if (buffmonth==0 && incr==-1){
        buffmonth = 11;
        buffyear--;
      } 
      else {
        (incr==1)?buffmonth++:buffmonth--;
      }
    }
    kalender(buffyear,buffmonth);
  }

  function changeVandaag(){
    if (maand!=buffmonth || jaar!=buffyear){
      kalender(ditjaar,dezemaand);
    }
  }

  function GoSelect(dit){
    var yr=parseInt(dit.form.Syear.options[dit.form.Syear.selectedIndex].value);
    var mnt=parseInt(dit.form.Smonth.options[dit.form.Smonth.selectedIndex].value);
    if (mnt!=buffmonth || yr!=buffyear){
      kalender(yr,mnt);
    }
  }
  
  function kalender(jaar,maand){
    writeString(maakKalender(jaar,maand));
  }

var tmpStr;
var buffyear;
var buffmonth;

function maakKalender(year,month){

var Selectie = new Array();
if (Feestdgn){addFeestdagen(year);}
buffyear=year;
buffmonth=month;

   // bijzondere dagen voor deze maand bepalen
   var maand = String(month);if(maand.length < 2){maand="0"+maand};
   var jaar  = String(year);
   var n=0;
   var klasse="";   
   for (i=0;i<Speciaal.length;i++){
     if (String(Speciaal[i].Sdatum).substr(0,6)==jaar+maand){
       Selectie[n] = Speciaal[i];
       n++;
     }
   }

   // sorteren en samenvoegen
   var itema;
   for (i=0;i<Selectie.length;i++){
     itema=i+1;
     if (itema<Selectie.length){
       for (j=i;j<Selectie.length;j++){
         if (Selectie[j].Sdatum < Selectie[itema].Sdatum){
           itema=j;
         }
      	 // samenvoegen
         if (Selectie[j].Sdatum == Selectie[itema].Sdatum && itema!=j && Selectie[j].Sdatum<Number(jaar+maand+"32")){
           Selectie[itema].Somschr+="<br>"+Selectie[j].Somschr;
           Selectie[j].Sdatum+=32;
           if (Selectie[itema].Sdatum==vandaag){
             Selectie[itema].Sklasse="Vandaag";
           }
           else{
             Selectie[itema].Sklasse="Speciaal";
           }
         }
         // einde samenvoegen 
       }
       if(itema!=j){	// ??
         temp=Selectie[i];
         Selectie[i]=Selectie[itema];
         Selectie[itema]=temp;
       }
     }
   }
				 				 
   // aantal dagen in deze maand
   var numDays    = daysInMonth(month+1, year); // month+1 ivm jan=1 en niet 0
   // ga naar eerste dag van de maand
   var firstDay   = new Date(year,month,1);
   // en bepaal welke dag van de week dat is
   var startDay = firstDay.getDay();
   // weeknummer bepalen op basis van de 1e van deze maand
   if(Weeknrs){var wknr=WeekNr(firstDay);}
   
   // Start van de kalender tabel   
   var column = 0;
   tmpStr="";
   tmpStr+="<TABLE class='TabelBasis' cellspacing='3' cellpadding='0'>";

   // maandTxt maand jaar en navigatie
   tmpStr+="<TR>"
   var cWnrs=(Weeknrs)?8:7;
   tmpStr+="<TD COLSPAN='"+cWnrs+"' class='RowTop'>";
  
  //--  start navigatie
  tmpStr += '<form style="display:inline">';
  tmpStr += '<table>';
  tmpStr += '<tr>';
  //-- maandTxt
  tmpStr += '<td class="MaandTxt">';
  tmpStr += maandTxt;
  tmpStr += '</td>';
  //-- maanden navigatie
  tmpStr += '<td>';
  tmpStr += "<a href='javascript: changeMaand(-1);'><img class='Pijltjes' src='/terug.gif' width='14' height='14' border='0' alt='Terug'></a>"; 
	tmpStr += '<select class="Jump" name="Smonth">';
	for (var i=0;i<monthName.length;i++){
	  tmpStr += '<option value="' + i + '"' 
		if (i == month) tmpStr += ' selected';
		tmpStr += '>' + monthName[i] + '</option>';
	}
	tmpStr += '</select>';
  tmpStr += "<a href='javascript: changeMaand(+1);'><img class='Pijltjes' src='/vooruit.gif' width'14' height='14' border='0' alt='Vooruit'></a>";
  tmpStr += '</td>';
  //-- jaren navigatie
  tmpStr += '<td>';
  tmpStr += "<a href='javascript: changeJaar(-1);'><img class='Pijltjes' src='/terug.gif' width='14' height='14' border='0' alt='Terug'></a>";
	tmpStr += '<select class="Jump" name="Syear">';
	for (var i=year-5;i<=year+5;i++){
	  tmpStr += '<option value="' + i + '"' 
		if (i == year) tmpStr += ' selected';
		tmpStr += '>' + i + '</option>';
	}
	tmpStr += '</select>';
  tmpStr += "<a href='javascript: changeJaar(+1);'><img class='Pijltjes' src='/vooruit.gif' width'14' height='14' border='0' alt='Vooruit'></a>";
  tmpStr += '</td>';
  //-- Ga button
  tmpStr += '<td>';
  tmpStr += '<input type="button" class="JumpButton" value="'+GoTxt+'" onfocus="this.blur()" onClick="GoSelect(this)">';
  tmpStr += '</td>';
  //-- Spacer
  tmpStr += '<td width="10px">';
  tmpStr += '&nbsp'
  tmpStr += '</td>';
  //-- Vandaag button
  tmpStr += '<td>';
  tmpStr += '<input type="button" class="JumpButton" value="'+TodayTxt+'" onfocus="this.blur()" onClick="changeVandaag();">';
  tmpStr += '</td>'; 
  //--
  tmpStr += '</tr>';
  tmpStr += '</table>';
  tmpStr += '</form>';

  //-- einde navigatie
   tmpStr+="</TD>";
   tmpStr+="</TR>";
   
   // weekdagen
   tmpStr+="<TR>";
   if(Weeknrs){tmpStr+="<TD  class='HweekNummer' >wk</TD>";} // weeknummer kop
   for(i=0;i<dayName.length;i++){
     tmpStr+="<TD class='DagNaam'>"+dayName[i]+"</TD>";
   }
   tmpStr+="</TR>";
	 
   // maak lege TD's voor de dagen van de week van voor het begin van de maand
   tmpStr+="<TR>";
   if(Weeknrs){tmpStr+="<TD class='weekNummer'>"+(wknr++)+"</TD>";} // weeknummer eerste week vd maand
   for (i = 0; i < startDay; i++){
     tmpStr+="<TD>&nbsp;</TD>";
     column++;
   }
   // bepaal de inhoud voor een dag
   var day;
   var huidig;
   var omschrijving="";
   var melding="";
   for (i=1; i <= numDays; i++){

     day =    String(i);if(day.length < 2){day="0"+day};
     huidig = Number(jaar+maand+day);

     if (huidig<vandaag){
       klasse="voorVandaag";
       melding="";
     }
     if (huidig==vandaag){
       klasse="vandaag";
       melding="<font class='melding'>"+VandaagTxt+"</font>";
     }
     if (huidig>vandaag){
       klasse="naVandaag";
       melding="";
     }

     // is er iets te melden ?
     for(x=0;x<Selectie.length&&Selectie[x].Sdatum<Number(jaar+maand+"32");x++){
       if (Selectie[x].Sdatum==huidig){
         omschrijving=Selectie[x].Somschr;
         klasse=Selectie[x].Sklasse;
         if (huidig<vandaag && klasse=="Speciaal"){
           klasse="voorSpeciaal";
         }
         if (huidig==vandaag){
           klasse="vandaag";
         }
         if (huidig>vandaag && klasse=="Speciaal"){
           klasse="naSpeciaal";
         }
       }
     }

      // schrijf een dag
      var s = "<p class=N"+klasse+">"+i+melding+"</p>";
      tmpStr+="<TD>"+s+"<div class="+klasse+">"+omschrijving+"</div></TD>";
      omschrijving="";
      // kijk of het het einde van de week(rij) is
      if (++column == 7 && i < numDays){
        tmpStr+="</TR><TR>"; // begin een nieuwe rij
        if(Weeknrs){tmpStr+="<TD class='weekNummer'>"+(wknr<=53?wknr++:WeekNr(new Date(year,11,31)))+"</TD>";} // weeknummer schrijven
        column = 0;
      }
   }
   // maak lege TR's voor de dagen van de week na het einde van de maand
   for (i = column; i < 7; i++){
     tmpStr+="<TD>&nbsp;</TD>";
   }
   tmpStr+="</TR>";
   tmpStr+="</TABLE>";
   
   return tmpStr;
}

// -- einde script --