var firstload = true;
// tool tip code
function showtip(e,message){var x=0;var y=0;var m;var h;if(!e)
var e=window.event;if(e.pageX||e.pageY){x=e.pageX;y=e.pageY;}
else if(e.clientX||e.clientY){x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;}
m=document.getElementById('tooltipmsg');m.style.top=y+6+"px";
var messageHeigth=(message.length/20)*10+25;if((e.clientY+messageHeigth)>510){m.style.top=y-messageHeigth+"px";}
var xp=document.body.offsetWidth;
if((x+200)<xp){m.style.left=x+20+"px";}else if ((x-200)<0) {m.style.left=0+"px";}else {m.style.left=x-200+"px";}
m.innerHTML=message;m.style.display="block";}
function hidetip(){var m;m=document.getElementById('tooltipmsg');m.style.display="none";}

// Tigra Calendar v4.0.2 (12-01-2009) European (dd-mm-yyyy)
// http://www.softcomplex.com/products/tigra_calendar/
// Public Domain Software... You're welcome.

// default settins
var frmId=document.getElementsByTagName("form");
var myDate= new Array();	
var A_NL = {
	'months' : ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'],
	'weekdays' : ['Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za'],
	'yearscroll': false, // show year scroller
	'weekstart': 1, // first day of week: 0-Su or 1-Mo
	'centyear'  : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx.
	'imgpath' : 'http://oudemuziek.bo9.nl/images/' // directory with calendar images
}

var A_EN = {
	'months' : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	'weekdays' : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
	'yearscroll': false, // show year scroller
	'weekstart': 1, // first day of week: 0-Su or 1-Mo
	'centyear'  : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx.
	'imgpath' : 'http://oudemuziek.bo9.nl/images/' // directory with calendar images
}

// date parsing function
function f_tcalParseDate (s_date) {

	var re_date = /^\s*(\d{1,2})\-(\d{1,2})\-(\d{2,4})\s*$/;
	if (!re_date.exec(s_date))
		if (a_lang=='nl') { return alert ("Ongeldige datum: '" + s_date + "'.\nGeldig formaat is dd-mm-yyyy.") }
		else { return alert ("Invalid date: '" + s_date + "'.\nAccepted format is dd-mm-yyyy.") }
	var n_day = Number(RegExp.$1),
		n_month = Number(RegExp.$2),
		n_year = Number(RegExp.$3);

	if (n_year < 100)
		n_year += (n_year < this.a_tpl.centyear ? 2000 : 1900);
	if (n_month < 1 || n_month > 12)
		if (a_lang=='nl') { return alert ("Ongeldige maand: '" + n_month + "'.\nKies een getal tussen 01-12."); }
		else { return alert ("Invalid month value: '" + n_month + "'.\nAllowed range is 01-12."); }
	var d_numdays = new Date(n_year, n_month, 0);
	if (n_day > d_numdays.getDate())
		if (a_lang=='nl') { return alert("Ongeldige dag of maand ingevuld: '" + n_day + "'.\nDeze maand: kies een getal tussen 01 - " + d_numdays.getDate() + "."); }
		else { return alert("Invalid day of month value: '" + n_day + "'.\nAllowed range for selected month is 01 - " + d_numdays.getDate() + "."); }

	return new Date (n_year, n_month - 1, n_day);
}
// date generating function
function f_tcalGenerDate (d_date) {
	return (
		(d_date.getDate() < 10 ? '0' : '') + d_date.getDate() + "-"
		+ (d_date.getMonth() < 9 ? '0' : '') + (d_date.getMonth() + 1) + "-"
		+ d_date.getFullYear()
	);
}
var a_lang='en';
// implementation
function tcal (a_cfg, a_tpl) {
	
	// apply default language if not specified
	if (!a_tpl) {
		a_tpl = A_EN;
	} else if (a_tpl==A_NL) { a_lang='nl'; }
	// register in global collections
	if (!window.A_TCALS)
		window.A_TCALS = [];
	if (!window.A_TCALSIDX)
		window.A_TCALSIDX = [];
	
	this.s_id = a_cfg.id ? a_cfg.id : A_TCALS.length;
	window.A_TCALS[this.s_id] = this;
	window.A_TCALSIDX[window.A_TCALSIDX.length] = this;
	
	// assign methods
	this.f_show = f_tcalShow;
	this.f_toggle = f_tcalToggle;
	this.f_update = f_tcalUpdate;
	this.f_relDate = f_tcalRelDate;
	this.f_parseDate = f_tcalParseDate;
	this.f_generDate = f_tcalGenerDate;
	
	// create calendar icon
	this.s_iconId = 'tcalico_' + this.s_id;
	// save received parameters
	this.a_cfg = a_cfg;
	this.a_tpl = a_tpl;
	
}

function f_tcalShow (d_date) {

	// find input field
	if (!this.a_cfg.controlname)
		throw("TC: control name is not specified");
	if (this.a_cfg.formname) {
		var e_form = document.forms[this.a_cfg.formname];
		if (!e_form)
			throw("TC: form '" + this.a_cfg.formname + "' can not be found");
		this.e_input = e_form.elements[this.a_cfg.controlname];
	}
	else
		this.e_input = f_getElement(this.a_cfg.controlname);

	if (!this.e_input || !this.e_input.tagName || this.e_input.tagName != 'INPUT')
		throw("TC: element '" + this.a_cfg.controlname + "' does not exist in "
			+ (this.a_cfg.formname ? "form '" + this.a_cfg.controlname + "'" : 'this document'));

	// dynamically create HTML elements if needed
	this.e_div = f_getElement('tcal');
	if (!this.e_div) {
		this.e_div = document.createElement("DIV");
		this.e_div.id = 'tcal';
		document.getElementById('bocal').appendChild(this.e_div);
	}
	this.e_iframe =  f_getElement('tcalIF')
	if (b_ieFix && !this.e_iframe) {
		this.e_iframe = document.createElement("IFRAME");
		this.e_iframe.style.filter = 'alpha(opacity=0)';
		this.e_iframe.id = 'tcalIF';
		this.e_iframe.src = this.a_tpl.imgpath + 'pixel.gif';
		document.getElementById('bocal').appendChild(this.e_iframe);
	}
	
	// hide all calendars
	//f_tcalHideAll();

	// generate HTML and show calendar
	if (!this.f_update())
		return;

	this.e_div.style.visibility = 'visible';
	if (this.e_iframe)
		this.e_iframe.style.visibility = 'visible';

	this.b_visible = true;	
	
}

function f_tcalToggle () {
	return this.b_visible=this.f_show();
}

function offTo(loc) { document.location=loc; }

function f_tcalUpdate(d_date) {

   

	var d_today = this.a_cfg.today ? this.f_parseDate(this.a_cfg.today) : f_tcalResetTime(new Date());
	var d_selected = this.e_input.value == ''
		? (this.a_cfg.selected ? this.f_parseDate(this.a_cfg.selected) : d_today)
		: this.f_parseDate(this.e_input.value);

	// figure out date to display
	if (!d_date)
		// selected by default
		d_date = d_selected;
	else if (typeof(d_date) == 'number')
		// get from number
		d_date = f_tcalResetTime(new Date(d_date));
	else if (typeof(d_date) == 'string')
		// parse from string
		this.f_parseDate(d_date);
		
	if (!d_date) return false;



	if (firstload) {
	    firstload = false;
	} else {
	    var thismonthm = d_date.getMonth() + 1;
	    var thismonthy = d_date.getFullYear();
	    var nextmonthm = (thismonthm < 12) ? thismonthm + 1 : 1;
	    var nextmonthy = (thismonthm < 12) ? thismonthy : thismonthy + 1;

	    getAgenda("1-" + thismonthm + "-" + thismonthy, "1-" + nextmonthm + "-" + nextmonthy, null, null, null, null);
	}       

	// first date to display
	var d_firstday = new Date(d_date);
	d_firstday.setDate(1);
	d_firstday.setDate(1 - (7 + d_firstday.getDay() - this.a_tpl.weekstart) % 7);
	var ny='Next Year';var nm='Next Month';var py='Previous Year';var pm='Previous Month';
	if (a_lang=='nl') { ny='Volgend jaar';nm='Volgende maand';py='Vorig jaar';pm='Vorige maand'; }
	var a_class, s_html = '<table class="ctrl"><tbody><tr>'
		+ (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, -1, 'y') + ' title="'+py+'"><img src="' + this.a_tpl.imgpath + 'prev_year.gif" /></td>' : '')
		+ '<td' + this.f_relDate(d_date, -1) + ' title="'+pm+'"><img src="' + this.a_tpl.imgpath + 'arrow_big_left.gif" /></td><th>'
		+ this.a_tpl.months[d_date.getMonth()] + ' ' + d_date.getFullYear()
			+ '</th><td' + this.f_relDate(d_date, 1) + ' title="'+nm+'"><img src="' + this.a_tpl.imgpath + 'arrow_big_right.gif" /></td>'
		+ (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, 1, 'y') + ' title="'+ny+'"><img src="' + this.a_tpl.imgpath + 'next_year.gif" /></td></td>' : '')
		+ '</tr></tbody></table><table><tbody><tr class="wd">';

	// print weekdays titles
	for (var i = 0; i < 7; i++)
		s_html += '<th>' + this.a_tpl.weekdays[(this.a_tpl.weekstart + i) % 7] + '</th>';
	s_html += '</tr>' ;

	// print calendar table
	var n_date, n_month, d_current = new Date(d_firstday);
	// to make sure to generate 6 rows at every month, set rows=6, otherwise set rows=4
	var rows=6;
	var startat1=false;
	while (d_current.getMonth() == d_date.getMonth() ||
		d_current.getMonth() == d_firstday.getMonth()) {
	
		// print row heder
		s_html +='<tr>';		
		for (var n_wday = 0; n_wday < 7; n_wday++) {

			a_class = [];
			n_date = d_current.getDate();
			n_month = d_current.getMonth();

			// event from database
			var a_tooltip='';
			var a_onclick = '';
			var a_title='';
			var nxtdate=this.f_generDate(new Date(d_current));
			if (myDate.length>0) {
				for (var i=0; i<myDate.length;i++) {
					var dateObj=myDate[i];
					var dbdate=dateObj.Date;
					if (nxtdate==dbdate) { 
						a_class[a_class.length] = 'event';
						a_title=dateObj.Title; 
						//a_tooltip=' onmouseover="showtip(event, \''+ a_title +'\');" onmouseout="hidetip();" onclick="offTo(\''+ dateObj.Url +'\');"';
						a_onclick = ' onclick=\'getAgenda("' + dbdate.valueOf() + '",null,null,null,null,null)\' '
						if (dateObj.Selected) { var sel=d_current;d_selected=sel; }
					}
				}
			}
			// other month
			if (d_current.getMonth() != d_date.getMonth()) {
				a_class[a_class.length] = 'othermonth';startat1=false;
			} else { startat1=true; }
			// weekend
			if (d_current.getDay() == 0 || d_current.getDay() == 6)
				a_class[a_class.length] = 'weekend';
			// today
			if (d_current.valueOf() == d_today.valueOf())
				a_class[a_class.length] = 'today';
			// selected
			if (d_current.valueOf() == d_selected.valueOf())
				a_class[a_class.length] = 'selected';

			s_html += '<td'+ a_onclick +' ' + (a_class.length ? ' class="' + a_class.join(' ') + '">' : '>') + n_date + '</td>'

			d_current.setDate(++n_date);
			while (d_current.getDate() != n_date && d_current.getMonth() == n_month) {
				d_current.setHours(d_current.getHours + 1);
				d_current = f_tcalResetTime(d_current);
			}
		}
		// print row footer
		s_html +='</tr>';
		rows--;		
	}
	if (startat1==true) n_date=1;
	for (var i=0;i<rows;i++) {
		s_html +='<tr><td class="othermonth">' + n_date + '</td><td class="othermonth">' + ++n_date + '</td><td class="othermonth">' + ++n_date + '</td><td class="othermonth">' + ++n_date + '</td><td class="othermonth">' + ++n_date + '</td><td class="othermonth weekend">' + ++n_date + '</td><td class="othermonth weekend">' + ++n_date + '</td></tr>';
	}
	s_html +='</tbody></table>';
	
	// update HTML, positions and sizes
	this.e_div.innerHTML = s_html;

	var n_width  = this.e_div.offsetWidth;
	var n_height = this.e_div.offsetHeight;
	
	if (this.e_iframe) {
		this.e_iframe.style.left = '0px';
		this.e_iframe.style.top  = '0px';
		this.e_iframe.style.width = (n_width + 6) + 'px';
		this.e_iframe.style.height = (n_height + 6) +'px';
	}
	return true;
}

function f_tcalRelDate (d_date, d_diff, s_units) {
	var s_units = (s_units == 'y' ? 'FullYear' : 'Month');
	var d_result = new Date(d_date);
	d_result['set' + s_units](d_date['get' + s_units]() + d_diff);
	if (d_result.getDate() != d_date.getDate())
		d_result.setDate(0);
return ' onclick="A_TCALS[\'' + this.s_id + '\'].f_update(' + d_result.valueOf() + ')"';
	
}

function f_tcalResetTime (d_date) {
	d_date.setHours(0);
	d_date.setMinutes(0);
	d_date.setSeconds(0);
	d_date.setMilliseconds(0);
	return d_date;
}

f_getElement = document.all ?
	function (s_id) { return document.all[s_id] } :
	function (s_id) { return document.getElementById(s_id) };

	
// global variables
var s_userAgent = navigator.userAgent.toLowerCase(),
	re_webkit = /WebKit\/(\d+)/i;
var b_mac = s_userAgent.indexOf('mac') != -1,
	b_ie5 = s_userAgent.indexOf('msie 5') != -1,
	b_ie6 = s_userAgent.indexOf('msie 6') != -1 && s_userAgent.indexOf('opera') == -1;
var b_ieFix = b_ie5 || b_ie6,
	b_ieMac  = b_mac && b_ie5,
	b_safari = b_mac && re_webkit.exec(s_userAgent) && Number(RegExp.$1) < 500;
	
function callCal(lan) {
	var a_calval = document.createElement("INPUT");
	a_calval.type = 'hidden';
	a_calval.id = 'calval';
	document.getElementById('bocal').appendChild(a_calval);
	new tcal ({		
		// form name
		'formname': "", //frmId[0].name,
		// input name
		'controlname': 'calval'
		// choose calendar language: add A_NL for dutch (default is english)
	}, lan);
}
function showCal() {
    // choose dutch language by adding A_NL
	callCal(A_NL);
	A_TCALS[0].f_toggle();
}
