//voor het verdere gebruik van de zoekdatum in Rental
var gZoekDatum;

// datum kalender
var gCurDatum = "";

// geselecteerde datum
var gSelDatum;

//kalender variabelen
var	gDag = 0;
var	gMaand = 0;
var	gJaar = 0;
var	gWeek = 0;

// de namen van de maanden
var maand_taal = new Array();
maand_taal["nl"] = ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'];
maand_taal["en"] = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
maand_taal["de"] = ['Januar', 'Februar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];

var dagen_kort_taal = new Array();
dagen_kort_taal["nl"] = [' m ', ' d ', ' w ', ' d ', ' v ', ' z ', ' z '];
dagen_kort_taal["en"] = [' m ', ' t ', ' w ', ' t ', ' f ', ' s ', ' s '];
dagen_kort_taal["de"] = [' m ', ' d ', ' m ', ' d ', ' f ', ' s ', ' s '];

var dagen_lang_taal = new Array();
dagen_lang_taal["nl"] = ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'];
dagen_lang_taal["en"] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
dagen_lang_taal["de"] = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samtag'];



var mn= maand_taal[taal];


//var mn = ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'];

// de korte namen van de dagen
//var dg=['Maa', 'Din', 'Woe', 'Don', 'Vrij', 'Zat', 'Zon'];
var dg=dagen_kort_taal[taal];

// de namen van de dagen
var dgn=dagen_lang_taal[taal];

// aantal dagen in de maand
var dim=[31,0,31,30,31,30,31,31,30,31,30,31];

function toonKalender()
{
	//console.log("call toonKalender()");
	//alert("toonKalender() called");
	var todaydate=new Date()
	var curmonth=todaydate.getMonth()+1;
	var curyear=todaydate.getFullYear();
	return buildCalEur(curmonth, curyear);
}

function showNav()
{
/*
	$$(".deNav").each(function(item) 
	{
		Event.observe(item, 'mouseover', function() { Element.addClassName(item, 'deNavHover'); } );
		
		onmouseover="Element.addClassName(item, 'deNavHover');"
		Event.observe(item, 'mouseout', function() { Element.removeClassName(item, 'deNavHover'); } );
	});

	$$(".day").each(function(item) 
	{
		Event.observe(item, 'mouseover', function() { Element.addClassName(item, 'cal_hover'); } );
		Event.observe(item, 'mouseout', function() { Element.removeClassName(item, 'cal_hover'); } );
		Event.observe(item, 'click', function() { activeDate(item) } );
	});

	$$("#deBox tbody tr").each(function(item) 
	{
		Event.observe(item, 'mouseover', function() { Element.addClassName(item, 'cal_row'); } );
		Event.observe(item, 'mouseout', function() { Element.removeClassName(item, 'cal_row'); } );
	});

	$$(".vorige").each(function(item) 
	{
		Event.observe(item, 'click', function() { prevMonth(); } );
	});


	$$(".volgende").each(function(item) 
	{
		Event.observe(item, 'click', function() { nextMonth(); } );
	});
*/
}

function voegClassNameToe(item, naam)
{
	Element.addClassName(item, naam);
}

function verwijderClassName(item, naam)
{
	Element.removeClassName(item, naam);
}


function activeDate(obj)
{
	var dag = obj.innerHTML;

	/*
	$$(".selDate").each(function(item) 
	{
		Element.removeClassName(item, 'selDate');
	});
	
	

	$$(".sel_row").each(function(item) 
	{
		Element.removeClassName(item, 'sel_row');
	});
	*/
	
	currentDag = $('deKalender').getElementsByClassName('selDate');
	currentWeek = $('deKalender').getElementsByClassName('sel_row');
	
	//verwijder de vorige aangeklikte dag
	if (currentDag != '') {
		Element.removeClassName(currentDag[0],'selDate');
	}

	//verwijder de vorige aangeklikte week
	if (currentWeek != '') {
		Element.removeClassName(currentWeek[0],'sel_row');
	}
	
	//kleur de huidige dag
	Element.addClassName(obj, 'selDate');
	
	//kleur de huidige week
	var prevObj = obj.up(0);
	Element.addClassName(prevObj, 'sel_row');

	

	tempMaand = gCurDatum.getMonth();
	tempJaar = gCurDatum.getFullYear();

	gSelDatum = new Date(tempJaar, tempMaand, dag);

	var dagVDweek = gSelDatum.getDay();
	var selmonth = gSelDatum.getMonth();
	var selyear = gSelDatum.getFullYear();

	var nrDag = gSelDatum.getDate();
	var naamDag = dgn[dagVDweek];
	var naamMaand = mn[selmonth];

	gDag = gSelDatum.getDay();
	gMaand = gSelDatum.getMonth() + 1;
	gJaar = gSelDatum.getFullYear();
	gWeek = getWeekByDate(gSelDatum);

	gDag = nrDag;

	var tekstDatum = naamDag + ", " + nrDag + " " + naamMaand + " " + selyear;
	
	//ivm opmaak uitgezet
	//$('selweek').update(tekstDatum);

	gZoekDatum = gDag + "-" + gMaand + "-" + gJaar;

	//update resultaten
	updateParameters();
	
	/*
	testDate = gSelDatum;
	testDate.setDate(testDate.getDate() + 2);
	
	alert(testDate);
	*/
}

function prevMonth()
{
	var tempDate = gCurDatum;
//alert(gCurDatum);
//alert("Maand: " + gCurDatum.getMonth());

	tempDate.setMonth(gCurDatum.getMonth() - 1);
	var tempMonth=tempDate.getMonth()+1;
	var tempYear=tempDate.getFullYear();

//alert(tempDate);

	// nieuwe kalender aanmaken
	var newCal = buildCalEur(tempMonth, tempYear);

	// de kalender vervangen
	$('deKalender').update(newCal);

	// navigatie activeren
	showNav();
}

function nextMonth()
{

	tempDate = gCurDatum;

	tempDate.setMonth(tempDate.getMonth() + 1);

	var tempMonth=tempDate.getMonth()+1;
	var tempYear=tempDate.getFullYear();

	// nieuwe kalender aanmaken
	var newCal = buildCalEur(tempMonth, tempYear);

	// de kalender vervangen
	$('deKalender').update(newCal);

	// navigatie activeren
	showNav();
}

function buildCalEur(m, y)
{

	// datum opvragen in de vorm van: "MON Jan 01 2007 00:00:00 GMT+0100 (CET)"
	var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st

	// start positie 1e dag van de maand - getDay = Dag van de Week
	oD.od=oD.getDay(); //DD replaced line to fix date bug when current day is 31st

	gCurDatum = oD;

	//voor het omzetten van het dagnummer. zondag 0->6 en de rest --;
	oD.od--;
	if (oD.od < 0)
	{
		oD.od = 6;
	}

	// huidige dag opvragen - resultaat is 0 als de dag niet in de huidige maand valt
	var todaydate=new Date()
	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0

	var isSelMonth = false;

	if (gJaar==oD.getFullYear() && gMaand==oD.getMonth()+1)
	{
		isSelMonth = true;
	}

	// bereken aantal dagen in februari
	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;

	// begin tabel
	var t = '';

	t+='<table border="0" cellspacing="0" cellpadding="3" id="deBox" class="cal_box" style="-moz-user-select: none;">';
	t+='	<thead>';
	t+='		<tr>';
	t+='			<th class="titel vorige" style="-moz-user-select: none; cursor: pointer;"><div class="deNav" title="vorige maand" onclick="prevMonth();" onmouseover="voegClassNameToe(this,\'deNavHover\');"  onmouseout="verwijderClassName(this,\'deNavHover\');">&laquo;</div></th>';
	t+='			<th colspan="6" class="titel">' + mn[m-1] + ' - ' + y + '</th>';
	t+='			<th class="titel volgende" style="-moz-user-select: none; cursor: pointer;"><div class="deNav" title="volgende maand" onclick="nextMonth();" onmouseover="voegClassNameToe(this,\'deNavHover\');"  onmouseout="verwijderClassName(this,\'deNavHover\');">&raquo;</div></th>';
	t+='		</tr>';
	t+='		<tr>';
	t+='			<th class="cal_wk"><span class="calright">wk</span></th>';

	// tekst dagen tonen
	for(s=0;s<7;s++)
	{
		if (s > 4)
		{
			t+='			<th class="weekend">' + dg[s] + '</th>';
		}
		else
		{
			t+='			<th>' + dg[s] + '</th>';
		}
	}

	t+='		</tr>';
	t+='	</thead>';
	t+='	<tbody>';

	var deWeek = getWeekByDate(oD);
	var rowKlasse = "";

	if (isSelMonth)
	{
		if (deWeek == gWeek)
		{
			rowKlasse = ' class="sel_row"';
		}
	}

	t+='		<tr' + rowKlasse + '>';
	t+='			<th><span class="calright">' + deWeek + '</span></td>';

	tl = 1;

	// de dagen tonen	
	for(i = 1; i <= 42; i++)
	{
		// kalender vullen met dagnr en anders met spatie
		// start positie wordt bepaald door variabele oD.od

		var offset = i - oD.od;
		var verborgenDatum = new Date(oD.getFullYear(), m-1, offset);

		// teller van de klassen
		telKlas = 0;
		var deKlassen = new Array();
		var actie = "";
		//eerste gedeelte voor begin, na de && voor het eind
		if ((i - oD.od > 0)&&(i - oD.od <= dim[m-1]))
		{
			x = i - oD.od;// +1;
			deKlassen[telKlas] = "day";
			actie = " onclick=\"activeDate(this);\"  onmouseover=\"voegClassNameToe(this,\'cal_hover\');\" onmouseout=\"verwijderClassName(this,\'cal_hover\');\" ";
			telKlas++;

			if (isSelMonth)
			{
				if (x == gDag)
				{
					deKlassen[telKlas] = "selDate";
					telKlas++;
				}
			}

			//de huidige dag kleuren oid
			if (x==scanfortoday)
			{
				deKlassen[telKlas] = "cal_today";
				telKlas++;
			}
		}
		else
		{
			//de dagen buiten de huidige maand
			x = verborgenDatum.getDate();
			deKlassen[telKlas] = "othermonth";
			telKlas++;
		}

		if (tl == 6 || tl == 7) 
		{ 
			deKlassen[telKlas] = "weekend";
			telKlas++;
		}

		var l = deKlassen.length;
		var deKlasse = "";

		for(w = 0; w < l; w++)
		{
			deKlasse += " " + deKlassen[w];
		}

		t+='<td unselectable="on" class="' + deKlasse + '" '+actie+'>' + x + '</td>';

		// einde regels
		if(((i)%7==0)&&(i<36))
		{
			var dagWeek = new Date(y, m-1, i+1);
			var deWeek = getWeekByDate(dagWeek);
			t+='		</tr>';
		
			var rowKlasse = "";
		
			if (isSelMonth)
			{
				if (deWeek == gWeek)
				{
					rowKlasse = ' class="sel_row"';
				}
			}
		
			t+='		<tr' + rowKlasse + '>';
			t+='			<th><span class="calright">' + deWeek + '</span></td>';
		}

		if (tl == 7) { tl = 0; }
		tl++;
	}

	var tekstDatum = '&nbsp;';

	if (gDag != 0)
	{
		// geselecteerde datum tonen
		var dagVDweek = gSelDatum.getDay();
		var selmonth = gSelDatum.getMonth();
		var selyear = gSelDatum.getFullYear();
	
		var nrDag = gSelDatum.getDate();
		var naamDag = dgn[dagVDweek];
		var naamMaand = mn[selmonth];
	
		var tekstDatum = naamDag + ", " + nrDag + " " + naamMaand + " " + selyear;
	}

// de tabel plus einde tabel

t+='	</tbody>';
//t+='	<tfoot>';
//t+='		<tr class="footrow">';
//t+='				<td colspan="8" id="selweek" class="tooltip">' + tekstDatum + '</td>';
//t+='		</tr>';
//t+='	</tfoot>';
t+='</table>';

return t;
}

/****************************/

var kDate_MillisecondsInSecond = 1000;
var kDate_SecondsInMinute      = 60;
var kDate_MinutesInHour        = 60;
var kDate_HoursInDay           = 24;
var kDate_DaysInWeek           = 7;

var kDate_SecondsInHour        = 3600;
var kDate_SecondsInDay         = 86400
var kDate_SecondsInWeek        = 604800

var kDate_MinutesInDay         = 1440;
var kDate_MinutesInWeek        = 10080;


var kDate_MillisecondsInMinute =     60000;
var kDate_MillisecondsInHour   =   3600000;
var kDate_MillisecondsInDay    =  86400000;
var kDate_MillisecondsInWeek   = 604800000;

function getWeekByDate(date)
{
  //ISO Week Number(01-53) for any date
  //code adapted from http://www.pvv.org/~nsaa/ISO8601.html
  ///////////////////
  // Calculate some date for this Year
  ///////////////////
  var Year = date.getFullYear();
  var FirstOfYear = new Date(Year,0,1) ;
  var LastOfYear = new Date(Year,11,31) ;
  var FirstDayNum = FirstOfYear.getDay() ;
  // ISO weeks start on Monday (day 1) and ends on Sunday (day 7) 
  var ISOFirstDayNum = (FirstDayNum ==0)? 7 : FirstDayNum ;
  // Week 1 of any year is the week that contains the first Thursday
  // in January : true if 1 Jan = mon - thu. WeekNumber is then 1
  var IsFirstWeek = ( ( 7 - ISOFirstDayNum ) > 2 )? 1 : 0 ;
  // The first Monday after 1 Jan this Year
  var FirstMonday = 9 - ISOFirstDayNum ;
  // Number of Days from 1 Jan to date
  var msOffset = ( FirstOfYear.getTimezoneOffset() - date.getTimezoneOffset() ) * kDate_MillisecondsInMinute;
  var DaysToDate = Math.floor((date.getTime()+msOffset-FirstOfYear.getTime())/kDate_MillisecondsInDay)+1 ;
  // Number of Days in Year (either 365 or 366);
  var DaysInYear =  (LastOfYear.getTime()-FirstOfYear.getTime())/kDate_MillisecondsInDay+1 ;
  // Number of Weeks in Year. Most years have 52 weeks, but years that start on
  // a Thursday and leapyears that starts on a Wednesday or a Thursday have 53 weeks
  var NumberOfWeeksThisYear = 
          (ISOFirstDayNum==4 || (ISOFirstDayNum==3 && DaysInYear==366)) ? 53 : 52;

  // "***********************************";
  // " Calculate some data for last Year ";
  // "***********************************";
  var FirstOfLastYear = new Date(Year-1,0,1) ;
  var LastOfLastYear = new Date(Year-1,11,31) ;
  var FirstDayNumLast = FirstOfLastYear.getDay() ;
  // ISO weeks start on Monday (day 1) and ends on Sunday (day 7) 
  var ISOFirstDayNumLast = (FirstDayNumLast ==0)? 7 : FirstDayNumLast ;
  // Number of Days in Year (either 365 or 366);
  var DaysInLastYear =  (LastOfLastYear.getTime()-FirstOfLastYear.getTime())/kDate_MillisecondsInDay+1 ;
  // Number of Weeks in Year. Most years have 52 weeks, but years that start on
  // a Thursday and leapyears that starts on a Wednesday or a Thursday have 53 weeks
  var NumberOfWeeksLastYear = 
          (ISOFirstDayNumLast==4 || (ISOFirstDayNumLast==3 && DaysInLastYear==366)) ? 53 : 52;
  // "****************************";
  // " Calculates the Week Number ";
  // "****************************";
  var DateDayNum = date.getDay() ;
  var ISODateDayNum = (DateDayNum ==0)? 7 : DateDayNum ;
  // Is Date in the last Week of last Year ?
  if( (DaysToDate < FirstMonday) &&  (IsFirstWeek == 0) ) 
     return(NumberOfWeeksLastYear) ;
  // "Calculate number of Complete Weeks Between D and 1.jan";
  var ComplNumWeeks = Math.floor((DaysToDate-FirstMonday)/7);
  // "Are there remaining days?";
  var RemainingDays = ( (DaysToDate+1-(FirstMonday+7*ComplNumWeeks))>0 );

  var NumWeeks = IsFirstWeek+ComplNumWeeks+1;
  if(RemainingDays) 
  {
    if(NumWeeks>52 && NumWeeks>NumberOfWeeksThisYear )
      return( 1 );
    else
      return( NumWeeks );   
  }
  else 
    return( NumWeeks - 1 );
}

//Fix Safari setMonth -1 bug
(function(){
	var set_month = Date.prototype.setMonth;
	Date.prototype.setMonth = function(num){
		if(num <= -1){
			var n = Math.ceil(-num);
			var back_year = Math.ceil(n/12);
			var month = (n % 12) ? 12 - n % 12 : 0 ;
			this.setFullYear(this.getFullYear() - back_year);
			return set_month.call(this, month);
		} else {
			return set_month.apply(this, arguments);
		}
	}
})();
