/**
 * @version			1.0.6 - 16 maart 2009
 * 
 * @copyright		1.0.6,	16 maart 2009,		Jan Niemantsverdriet,	Onchange functie wordt meegenomen
 * @copyright		1.0.5,	3 juli 2008,		Jan Niemantsverdriet,	Positie wordt nu gevonden met iFindScreenPos i.p.v. iFindPos
 * @copyright		1.0.4,	23 juni 2008,		Jan Niemantsverdriet,	Popup sluit weer
 * @copyright		1.0.3,	26 mei 2008,		Jan Niemantsverdriet,	Als vanuit dag 0 dag 31 wordt geselecteerd, en de huidige maand heeft minder dagen, wordt de maand op januari gezet
 * @copyright		1.0.2,	14 april 2008,		Jan Niemantsverdriet,	Datum kan ook 0 zijn
 * @copyright		1.0.1,	8 februari 2008,	Jan Niemantsverdriet,	Popup opent op geselecteerde maand
 * @copyright		1.0.1,	8 februari 2008,	Jan Niemantsverdriet,	Werkt nu met de dropdowns samen
 * @copyright		1.0.0,	5 februari 2008,	Jan Niemantsverdriet,	Gemaakt
 * 
 * @copyright		afhankelijkheid:	BB/Screen/screen.js
 * @copyright		afhankelijkheid:	BB/JSDivers/DOM.js
 * @copyright		afhankelijkheid:	BB/JSDivers/check.js
 * @copyright		afhankelijkheid:	BB/Form/Fields/CpFormDate.css
 */

/**
 * @var cScreen				de popup die op dit moment wordt getoond
 */
var CpFormDate_currentPopup = null;

/**
 * @var string				de id van het veld wat bij de popup hoort
 */
var CpFormDate_sId = null;

/**
 * @var string				het script wat moet worden uitgevoerd bij verandering
 */
var CpFormDate_sOnchange = null;

/**
 * Opent een kalender popup
 * 
 * @param string a_sId			het id van het veld dat de popup verzoekt
 * @param string a_sOnchange	het stukje javascript wat uitgevoerd dient te worden bij veranderingen
 */
function CpFormDate_openCalendar(a_sId, a_sOnchange) {
	CpFormDate_sId = a_sId;
	oImg = document.getElementById(a_sId + "_img");
	CpFormDate_currentPopup = new cScreen(CpFormDate_sInnerHTML(), 'CpFormCalendar_Popup', a_sId + "_popup");
	aPositie = aFindScreenPos(oImg);
	CpFormDate_currentPopup.vSetPosition(aPositie[0] + 20, aPositie[1] - 5);
	CpFormDate_currentPopup.vSetClose(false);
	CpFormDate_currentPopup.vSetCloseOnMis(true);
	CpFormDate_currentPopup.vToScreen();
	CpFormDate_sOnchange = a_sOnchange;
}

/**
 * Creert de html voor in de popup
 * 
 * @param integer|void a_iYear			het weer te geven jaar (niet meegeven = dit jaar)
 * @param integer|void a_iMonth			de weer te geven maand (niet meegeven = deze maand)
 */
function CpFormDate_sInnerHTML(a_iYear, a_iMonth) {
	oDate = new Date();
	oDay = document.getElementById(CpFormDate_sId + "_iDay");
	oMonth = document.getElementById(CpFormDate_sId + "_iMonth");
	oYear = document.getElementById(CpFormDate_sId + "_iYear");
	var iYear = (bIsDefined(a_iYear) ? a_iYear : oYear.value);
	var iMonth = (bIsDefined(a_iMonth) ? a_iMonth : oMonth.value);
	if ((iYear * iMonth) == 0) {
		iMonth = (oDate.getMonth() + 1);
		iYear = oDate.getFullYear();
	}
	oDate.setMonth(iMonth - 1);
	oDate.setYear(iYear);
	bSelectedMonth = (iMonth == oMonth.value && iYear == oYear.value);
	sHTML = '<div class="CpFormDate_popupBar"><table><tr>' + 
			'<td><a href="javascript:CpFormDate_vChangeCalendarDate(' + iYear + ', ' + (parseInt(iMonth,10) - 1) + ')" title="Maand eerder">&lt;</a></td>' +
			'<td>' + CpFormDate_sMonthName(iMonth) + '</td>' +
			'<td><a href="javascript:CpFormDate_vChangeCalendarDate(' + iYear + ', ' + (parseInt(iMonth,10) + 1) + ')" title="Maand verder">&gt;</a></td>' +
			'<td><a href="javascript:CpFormDate_vChangeCalendarDate(' + (parseInt(iYear,10) - 1) + ', ' + iMonth + ')" title="Jaar eerder">&lt;</a></td>' +
			'<td>' + iYear + '</td>' +
			'<td><a href="javascript:CpFormDate_vChangeCalendarDate(' + (parseInt(iYear,10) + 1) + ', ' + iMonth + ')" title="Jaar verder">&gt;</a></td>' +
			'</tr></table></div>';
	sHTML +=	'<table class="CpFormDate_popupContent"><tr><th>ma</th><th>di</th><th>wo</th>' +
				'<th>do</th><th>vr</th><th>za</th><th>zo</th></tr><tr>';
	oDate.setDate(1);
	iStart = (oDate.getDay() > 0 ? oDate.getDay() : 7); 
	for (iCounter = 1; iCounter < iStart; iCounter++) sHTML += '<td/>';
	for (iCounter = 1; iCounter <= CpFormDate_iNumberOfDays(iYear, iMonth); iCounter++) {
		if (((oDate.getDay() + iCounter - 2) % 7) == 0) sHTML += '</tr><tr>';
		sHTML += 	'<td' + (bSelectedMonth && iCounter == oDay.value ? ' class="CpFormDate_selectedDay"' : '') + '>' +  
					'<a href="javascript:CpFormDate_vSetDate(' + iYear + ', ' + iMonth + ', ' + iCounter + ')" title="Zet de datum op deze dag">' + iCounter + '</a>' +
					'</td>';
	}
	var iTotal = CpFormDate_iNumberOfDays(iYear, iMonth) + oDate.getDay() - 1;
	var iFill = (7 - iTotal % 7);
	if (iFill < 7) for (iCounter = 0; iCounter < iFill; iCounter++) sHTML += '<td />';
	sHTML += '</tr></table>';
	return sHTML;
}

/**
 * Geeft de naam van de maand terug
 * 
 * @param integer a_iMonth		de maand (1 - 12)
 * @return string 				de naam van de maand
 */
function CpFormDate_sMonthName(a_iMonth) {
	if (a_iMonth == 1) return "januari";
	if (a_iMonth == 2) return "februari";
	if (a_iMonth == 3) return "maart";
	if (a_iMonth == 4) return "april";
	if (a_iMonth == 5) return "mei";
	if (a_iMonth == 6) return "juni";
	if (a_iMonth == 7) return "juli";
	if (a_iMonth == 8) return "augustus";
	if (a_iMonth == 9) return "september";
	if (a_iMonth == 10) return "oktober";
	if (a_iMonth == 11) return "november";
	if (a_iMonth == 12) return "december";
	return "?";
}

/**
 * Zet de kalender een maand eerder
 * 
 * @param integer a_iYear		het nieuwe jaar
 * @param integer a_iMonth		de nieuwe maand
 */
function CpFormDate_vChangeCalendarDate(a_iYear, a_iMonth) {
	iYear = a_iYear;
	iMonth = a_iMonth;
	if (iMonth == 0) {
		iYear--;
		iMonth = 12;
	}
	if (iMonth == 13) {
		iYear++;
		iMonth = 1;
	}
	CpFormDate_currentPopup.vUpdate(CpFormDate_sInnerHTML(iYear, iMonth));
}

/**
 * Geeft het aantal dagen in een maand
 * 
 * @param integer a_iYear		het jaar (4 cijfers)
 * @param integer a_iMonth		de maand (1 - 12)
 * @return integer				aantal dagen in die maand (28 - 31)
 */
function CpFormDate_iNumberOfDays(a_iYear, a_iMonth) {
	iMonth = a_iMonth - 1;
	return 32 - new Date(a_iYear, iMonth, 32).getDate();
}

/**
 * Zet de datum in het veld en sluit de popup
 * 
 * @param integer a_iYear			het jaar
 * @param integer a_iMonth			de maand
 * @param integer a_iDay			de dag van de maand
 */
function CpFormDate_vSetDate(a_iYear, a_iMonth, a_iDay) {
	oDay = document.getElementById(CpFormDate_sId + "_iDay");
	oMonth = document.getElementById(CpFormDate_sId + "_iMonth");
	oYear = document.getElementById(CpFormDate_sId + "_iYear");
	oYear.value = a_iYear;
	oMonth.value = a_iMonth;
	CpFormDate_vSetDaySelect(CpFormDate_sId, a_iDay);
	CpFormDate_vNewDate(CpFormDate_sId, null);
	CpFormDate_currentPopup.vClose();
	eval(CpFormDate_sOnchange);
}


/**
 * Stelt de datum opnieuw indien nadat een van de dropdowns is gewijzigd
 * 
 * @param string a_sId				de id van het veld
 * @param SELECT|null a_oField		de gewijzigde select
 * @since 1.0.1 - 8 februari 2008
 */
function CpFormDate_vNewDate(a_sId, a_oField) {
	var oDay = document.getElementById(a_sId + "_iDay");
	var oMonth = document.getElementById(a_sId + "_iMonth");
	var oYear = document.getElementById(a_sId + "_iYear");
	var sDate = 0;
	var oField = document.getElementById(a_sId);
	if (a_oField != null && a_oField.value == 0) {
		oDay.value = 0;
		oMonth.value = 0;
		oYear.value = 0;
	} else {
		var oDate = new Date();
		var iMonth = oDate.getMonth() + 1;
		if (a_oField != null && a_oField.id == a_sId + '_iDay') {
			var oTempDate = new Date(oDate.getFullYear(), oDate.getMonth(), 32);
			if (a_oField.value > 32 - oTempDate.getDate()) iMonth = 1;
		}
		if (oDay.value == 0) oDay.value = oDate.getDate();
		if (oMonth.value == 0) oMonth.value = iMonth;
		if (oYear.value == 0) oYear.value = oDate.getFullYear();
		CpFormDate_vSetDaySelect(a_sId, oDay.value);
		sDate = oDay.value + '-' + oMonth.value + '-' + oYear.value;
	}
	oField.value = sDate;
}

/**
 * Zet het aantal dagen in de maand goed
 * 
 * @param string a_sId		het id van het veld
 * @since 1.0.1 - 8 februari 2008
 */
function CpFormDate_vSetDaySelect(a_sId, a_iDay) {
	oDay = document.getElementById(a_sId + "_iDay");
	oMonth = document.getElementById(a_sId + "_iMonth");
	oYear = document.getElementById(a_sId + "_iYear");
	oDay.options.length = 0;
	oDay.options[0] = new Option('-', 0);
	for (iCounter = 1; iCounter <= CpFormDate_iNumberOfDays(oYear.value, oMonth.value); iCounter++) {
		oDay.options[iCounter] = new Option(iCounter, iCounter);
	}
	iDay = (a_iDay < oDay.options.length ? a_iDay : oDay.options.length - 1);
	oDay.value = iDay;
}
