// Event Calendar
// copyright Stephen Chapman, 10th June 2006, 30th October 2006

var headbg = '#e3e4e5';  // table heading background colour
var todaybg = '#80993d'; // current selected date background colour
var textclr = '#000000'; // text colour
var linkclr = '#000000;font-weight:bold;'; // link text colour
var noMessage =  'No festivals or events are scheduled for this period'; // message to display when no entry in array

var dA = new Array(); 
var dX = new Array(); 

// permission is granted to use this javascript provided that the below code is not altered
var pageLoaded = 0;
function loaded(i,f) {if (document.getElementById && document.getElementById(i) != null) f(); else if (!pageLoaded) setTimeout('loaded(\''+i+'\','+f+')',100);
}
function monthlength(month,year) {var dd = new Date(year, month, 0);return dd.getDate();}
var moy = ['January','February','March','April','May','June','July','August','September','October','November','December'];
var today = new Date();
var selDate = today.getFullYear()+getmmdd(today.getMonth()+1,today.getDate());
function dispCal(yy,mm) {
	if (mm < 0 || mm > 12) {alert('month must be between 1 and 12'); return false;} 
	if (yy != 0 && (yy < 1901 || yy > 2100)) {alert('year must be after 1900 and before 2101'); return false;} 
	var dow = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; 
	var calendar = new Date();  
	var today = calendar.getDate(); calendar.setDate(1); 
	if (yy > 1900) calendar.setFullYear(yy); 
	if (mm > 0) calendar.setMonth(mm - 1); 
	var yy = year = calendar.getFullYear(); 
	var month = calendar.getMonth(); calendar.setDate(today); 
	var weekday = calendar.getDay(); 
	var daysInMonth = monthlength(month+1,year); 
	var hilite_start = '<td width="30" style="background:' + todaybg + '" align="center"><b>'; 
	var td_start = '<td width="30" align="center">'; 
	var cal = '<div id="user_cal"><div style="border:1pt solid #e3e4e5;width:238px;float:left;">';
	cal+='<table border="0" cellspacing="0" cellpadding="2" align="center" style="background-color:#faf7eb">';
	cal+='<tr><td colspan="7" style="background:' + headbg + '" align="center"><b>' + moy[month]  + ' ' + year + '<\/b><\/td><\/tr><tr>';
	for(dex=0; dex < 7; dex++) {
		cal += td_start + dow[dex] + '</td>';
	}
	cal += '<\/tr><tr>'; 
	var day2 = today; 
	for (dex = today; dex > 6; dex -=7) day2 = dex; weekday -= day2 - 1; 
	while (weekday < 0) weekday += 7; 
	for(dex=0; dex < weekday; dex++) cal += td_start + ' <\/td>'; 
	for(dex=1; dex <= daysInMonth; dex++) {
		if(weekday == 7) {cal += '</tr><tr>'; weekday = 0;} 
		if(selDate==year+getmmdd(month+1,dex)) {
			cal += hilite_start +'<span'+clickDate(dex,month,year) + '>'+ dex + '<\/span><\/b><\/td>'; 
		} else {
			cal += td_start + '<span '+clickDate(dex,month,year) + '>' + dex + '<\/span><\/td>'; 
		}
		weekday += 1;
	} 
	for(dex=weekday; dex < 7; dex++) cal += td_start + ' <\/td>'; cal += '<\/tr><\/table>';
	if (document.getElementById) {
		var mmb = month;  
		mm = month + 1;	
		var yya = yyb = yy; if (mmb <1) {mmb += 12; yyb--;} var mma = month + 2; if (mma > 12) {mma -= 12; yya++;} var yb = yy -1; 
		var ya = yy +1; 
		cal += '<table border="0" cellspacing="0" cellpadding="2" width="238" style="background-color:#e3e4e5;color:white;">';
		cal += '<tr><td><a href="#" onclick="newMonth('+yb+','+mm+'); return false;"><<</a></td>';
		cal += '<td><a href="#" onclick="newMonth('+yyb+','+mmb+');return false;"><</a></td>';
		cal += '<td align="right"><a href="#" onclick="newMonth('+yya+','+mma+'); return false;">></a></td>';
		cal += '<td align="right"><a href="#" onclick="newMonth('+ya+','+mm+'); return false;">>></a></td></tr></table></div>';
	} else {
		cal += '<div> </div>';
	}
	cal += '</div>';
	return cal;
}
function newMonth(y,m){
	if (cala = dispCal(y,m)) {
		document.getElementById('user_cal').innerHTML = cala;
	}
	dispMonthEvents(y,m);
}
function calendarstart() {
	var y = dispCal(0,0) 
	document.getElementById('user_calendar').innerHTML ='<table width="540"><tr><td valign="top" width="240" align="left" id="user_calDate"></td><td valign="top" width="240">'+y+'</td></tr></table>' ;

	dispMonthEvents(today.getFullYear(),today.getMonth()+1);
}
loaded('user_calendar',calendarstart);
function clickDate(day, month, year) {
	var ct = nextDate(year + getmmdd(month+1,day));
	if (ct == '') {
		return 'style="color:'+textclr+'"';
	} else {
		return 'style="color:'+linkclr+'"';
	}
}
function dispMonthEvents(y,m){
	nowY=today.getFullYear();
	nowM=today.getMonth()+1;
	var fromY=nowY;
	var fromM=nowM;
	var mDiff=m-nowM;
	var yDiff=y-nowY;
	mDiff=mDiff+(yDiff*12);
	if(mDiff<=0){ //this idate is within 6 months or in the past so start from date chosen
		fromY=y;
		fromM=m;
	} else if(mDiff<6){
		fromY=nowY;
		fromM=nowM;
	} else {
		fromY=y;
		fromM=m-6;
		if(fromM<1){
			fromY--;
			fromM=12+fromM;
		}
	}
	var x = dX.length;
	var evnts='';
	for(var j=0;j<12;j++){
		var mevnts='';
		for (var i = 0; i < x; i++) {
			var yymm=getyymm(fromY,fromM);
			if (dX[i][0] == yymm){
				mevnts+= '<li><b>'+dX[i][3]+'</b><br /><a href="'+dX[i][2]+'">'+dX[i][1]+'</a></li>';
			}
		}
		if(mevnts!=''){
		evnts+= '<ul';
		if(y==fromY && m==fromM) evnts+=' class="monthnow"'
		evnts+='><caption>'+moy[fromM-1]+' '+fromY;
		evnts+=mevnts;
		evnts+='</caption></ul>';
		}
		fromM++;
		if(fromM>12){
			fromM=1;
			fromY++;
		}
	}
	if(evnts=='') evnts=noMessage;
	document.getElementById('user_calDate').innerHTML = evnts; 
}
function nextDate(yymmdd) {
	var x = dA.length;
	for (var i = 0; i < x; i++) {
		if (dA[i].substr(0,8) == yymmdd) return dA[i].substr(8);
	}return '';
}
function getmmdd(mm,dd) {return (mm > 9 ? '' + mm : '0' + mm) + (dd > 9 ? dd : '0' + dd);}
function getyymm(y,m){
	return y+(m > 9 ? '' + m : '0' + m);
}
function getOrdinal(dd){
	var d=parseInt(dd,10);
	if(d==1 || d==21 || d==31){
		return d+'st';
	} else if(d==2 || d==22) {
		return d+'nd';
	} else if(d==3 || d==23){
		return d+'rd';
	} else return d+'th';
}
