//allows multiple load events
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
    	window.onload = function() {
    	oldonload();
   	 	func();
    	}
	}
}
//allows easy insertion of elements after other elements
function insertAfter(newElement,targetElement) {
	var parent = targetElement.parentNode;
	if (parent.lastChild == targetElement) {
		parent.appendChild(newElement);	
	}
	else {
		parent.insertBefore(newElement,targetElement.nextSibling);	
	}
}
addLoadEvent(buildMonthFilter);

function buildMonthFilter() {
	var monthList = document.createElement("select");
	var firstOpt = document.createElement("option");
	var text = document.createTextNode("-- Select --");
	firstOpt.setAttribute("value","");
	firstOpt.appendChild(text);
	monthList.appendChild(firstOpt);
	var td = document.getElementById("calendar").getElementsByTagName("td");
	for (var i = 0; i < td.length; i++) {
		if (td[i].getAttribute("className") == "month" || td[i].getAttribute("class") == "month") {
			if (td[i].parentNode.getAttribute("class") != "hide" || td[i].parentNode.getAttribute("className") != "hide") {
				var opt = document.createElement("option");	
				var text = document.createTextNode(td[i].getElementsByTagName("span").item(0).firstChild.nodeValue);
				opt.appendChild(text);
				opt.setAttribute("value",td[i].getElementsByTagName("span").item(0).firstChild.nodeValue);
				monthList.appendChild(opt);
			}
		}
	}
	monthList.onchange = function() {
		filter("filterMonth",0);
	}
	monthList.setAttribute("id","filterMonth");
	var tr = document.createElement("tr");
	tr.setAttribute("id","filterRow");
	tr.setAttribute("className","filterRow");
	tr.setAttribute("class","filterRow");
	var td = document.createElement("td");
	td.setAttribute("class","filter");
	td.setAttribute("className","filter");
	td.setAttribute("id","monthFilter");
	td.appendChild(monthList);
	tr.appendChild(td);
	var tb = document.getElementById("calendar").getElementsByTagName("tr").item(0);
	if (document.getElementById("filterRow")) {
		if (document.getElementById("monthFilter")) {
			document.getElementById("filterRow").replaceChild(td,document.getElementById("monthFilter"));
		}
		else {
			tr.appendChild(td);
		}
	}
	else {
		insertAfter(tr,tb);
	}
}
function filter(id,column) {
	if (document.getElementById(id).getAttribute("value")) {
		var filterType = document.getElementById(id).getAttribute("value");
	}
	else {
		var filterType = document.getElementById(id).value;
	}
	if (document.getElementById("filterMonth").getAttribute("value")) {
		var month = document.getElementById("filterMonth").getAttribute("value");
	}
	else {
		var month = document.getElementById("filterMonth").value;
	}
	var monthsToShow = new Array();
	var tr = document.getElementById("calendar").getElementsByTagName("tr");
	for (var i = 0; i < tr.length; i++) {
		if (tr[i].getElementsByTagName("td").length > 0) {
			tr[i].setAttribute("className","hide");
			tr[i].setAttribute("class","hide");
			if(tr[i].getElementsByTagName("td").item(column)) {
				var td = tr[i].getElementsByTagName("td").item(column);
				if (td.getAttribute("className") != "filter" || td.getAttribute("class") != "filter") {
					if (filterType != td.firstChild.nodeValue) {
						tr[i].setAttribute("className","hide");
						tr[i].setAttribute("class","hide");
					}
					else {
						tr[i].removeAttribute("className");
						tr[i].removeAttribute("class");
						monthsToShow.push(tr[i].getElementsByTagName("td").item(0).firstChild.nodeValue);
					}
				}
			}
			else if (tr[i].getElementsByTagName("td").item(0).getAttribute("className") != "month" || tr[i].getElementsByTagName("td").item(0).getAttribute("class") != "month") {
				if (tr[i].getElementsByTagName("td").item(0).firstChild.nodeValue != month) {
					tr[i].setAttribute("className","hide");
					tr[i].setAttribute("class","hide");
				}
			}
		}
		else {
			tr[i].removeAttribute("class");
			tr[i].removeAttribute("className");
		}
	}
	for (var j = 0; j < monthsToShow.length; j++) {
		document.getElementById(monthsToShow[j]).parentNode.removeAttribute("className");
		document.getElementById(monthsToShow[j]).parentNode.removeAttribute("class");
		document.getElementById(monthsToShow[j]).getElementsByTagName("a").item(0).setAttribute("className","hide");
		document.getElementById(monthsToShow[j]).getElementsByTagName("a").item(0).setAttribute("class","hide");
	}
	document.getElementById("filterRow").removeAttribute("class");
	document.getElementById("filterRow").removeAttribute("className");
	document.getElementById("headerRow").removeAttribute("class");
	document.getElementById("headerRow").removeAttribute("className");
	if (id == "filterEvent") {
		document.getElementById("filterMonth").selectedIndex = 0;
		document.getElementById("filterReligion").selectedIndex = 0;
	}
	if (id == "filterReligion") {
		document.getElementById("filterMonth").selectedIndex = 0;
		document.getElementById("filterEvent").selectedIndex = 0;
	}
	if (id == "filterMonth") {
		document.getElementById("filterReligion").selectedIndex = 0;
		document.getElementById("filterEvent").selectedIndex = 0;
	}
	document.getElementById("resetButton").removeAttribute("disabled");
}
addLoadEvent(buildEventFilter);
function buildEventFilter() {
	var eventList = document.createElement("select");
	var firstOpt = document.createElement("option");
	var text = document.createTextNode("-- Select --");
	firstOpt.setAttribute("value","");
	firstOpt.appendChild(text);
	eventList.appendChild(firstOpt);
	var tr = document.getElementById("calendar").getElementsByTagName("tr");
	for (var i = 0; i < tr.length; i++) {
		if (tr[i].getAttribute("class") != "hide" || tr[i].getAttribute("className") != "hide") {
			if (tr[i].getElementsByTagName("td").item(2)) {
				var td = tr[i].getElementsByTagName("td").item(2);
				var opt = document.createElement("option");	
				var text = document.createTextNode(td.firstChild.nodeValue);
				opt.setAttribute("value",td.firstChild.nodeValue);
				opt.appendChild(text);
				opt.setAttribute("value",td.firstChild.nodeValue);
				eventList.appendChild(opt);
			}
		}
	}
	eventList.onchange = function() {
		filter("filterEvent",2);
	}
	eventList.setAttribute("id","filterEvent");

	var tr = document.getElementById("filterRow");
	var td = document.createElement("td");
	td.setAttribute("class","filter");
	td.setAttribute("className","filter");
	td.setAttribute("id","eventFilter");
	td.appendChild(eventList);
	if (document.getElementById("eventFilter")) {
		document.getElementById("filterRow").replaceChild(td,document.getElementById("eventFilter"));
	}
	else {
		tr.appendChild(td);
	}
	sortList("filterEvent");
	dropDups("filterEvent");
	zebraStripes();
}
addLoadEvent(buildReligionFilter);
function buildReligionFilter() {
	var religionList = document.createElement("select");
	var firstOpt = document.createElement("option");
	var text = document.createTextNode("-- Select --");
	firstOpt.setAttribute("value","");
	firstOpt.appendChild(text);
	religionList.appendChild(firstOpt);
	var tr = document.getElementById("calendar").getElementsByTagName("tr");
	for (var i = 0; i < tr.length; i++) {
		if (tr[i].getAttribute("class") != "hide" || tr[i].getAttribute("className") != "hide") {
			if (tr[i].getElementsByTagName("td").item(3)) {
				var td = tr[i].getElementsByTagName("td").item(3);
				var opt = document.createElement("option");	
				var text = document.createTextNode(td.firstChild.nodeValue);
				opt.setAttribute("value",td.firstChild.nodeValue);
				opt.appendChild(text);
				opt.setAttribute("value",td.firstChild.nodeValue);
				religionList.appendChild(opt);
			}
		}
	}
	religionList.onchange = function() {
		filter("filterReligion",3);
	}
	religionList.setAttribute("id","filterReligion");
	var tr = document.getElementById("filterRow");
	var td = document.createElement("td");
	td.setAttribute("class","filter");
	td.setAttribute("className","filter");
	td.setAttribute("id","religionFilter");
	td.appendChild(religionList);
	var p = document.createElement("p");
	p.setAttribute("id","reset");
	var button = document.createElement("input");
	button.setAttribute("value","Show all events");
	button.setAttribute("id","resetButton");
	button.setAttribute("type","button");
	button.setAttribute("disabled","true");
	button.onclick = function() {
		resetTable();
	}
	p.appendChild(button);
	if (!document.getElementById("reset")) {
		document.getElementById("calendar").parentNode.insertBefore(p,document.getElementById("calendar"));
	}
	if (document.getElementById("religionFilter")) {
		document.getElementById("filterRow").replaceChild(td,document.getElementById("religionFilter"));
	}
	else {
		tr.appendChild(td);
	}
	sortList("filterReligion");
	dropDups("filterReligion");
}
function resetTable() {
	var tr = document.getElementById("calendar").getElementsByTagName("tr");
	for (var i = 0; i < tr.length; i++) {
		if (tr[i].getAttribute("class") == "hide" || tr[i].getAttribute("className") == "hide") {
			tr[i].removeAttribute("className");
			tr[i].removeAttribute("class");
		}
	}
	var a = document.getElementById("calendar").getElementsByTagName("a");
	for (var j = 0; j < a.length; j++) {
		if (a[j].getAttribute("class") == "hide" || a[j].getAttribute("className") == "hide") {
			a[j].removeAttribute("className");
			a[j].removeAttribute("class");
		}
	}
	buildEventFilter();
	buildReligionFilter();
	buildMonthFilter();
	document.getElementById("filterMonth").selectedIndex = 0;
	document.getElementById("filterEvent").selectedIndex = 0;
	document.getElementById("filterReligion").selectedIndex = 0;
	document.getElementById("resetButton").setAttribute("disabled",true);
}
function sortList(id) {
	var lb = document.getElementById(id);
	arrTexts = new Array();

	for(i=0; i<lb.length; i++)  {
  		arrTexts[i] = lb.options[i].text;
	}

	arrTexts.sort();

	for(i=0; i<lb.length; i++)  {
  		lb.options[i].text = arrTexts[i];
  		lb.options[i].value = arrTexts[i];
	}
}
function dropDups(id) {
	var Target = document.getElementById(id);;
	var TIx1, TValue0, TValue1, TText0, TText1;
	for (TIx1=1; TIx1<Target.options.length; TIx1++) {
		TValue0=Target.options[TIx1-1].value;
		TText0 =Target.options[TIx1-1].text;
		TValue1=Target.options[TIx1].value;
		TText1 =Target.options[TIx1].text;
		if ((TValue1 == TValue0) && (TText1 == TText0)) {
			Target.options[TIx1]=null;
			TIx1-=1;
		}
	}
}
addLoadEvent(buildTodayList);
function buildTodayList(){
var TodayDate = new Date();
var todaytitle=false;
var Months=new Array(12);
Months[0]="January";
Months[1]="February";
Months[2]="March";
Months[3]="April";
Months[4]="May";
Months[5]="June";
Months[6]="July";
Months[7]="August";
Months[8]="September";
Months[9]="October";
Months[10]="November";
Months[11]="December";
var TodayMonth = Months[TodayDate.getMonth()];
var TodayDay = TodayDate.getDate();
var todaytext = document.createTextNode(' ('+TodayDay +' '+ TodayMonth +')')
var tr = document.getElementById("calendar").getElementsByTagName("tr");
	for (var i = 1; i < tr.length; i++) {
		if (tr[i].getElementsByTagName("td").length > 1) {
			if (tr[i].getAttribute("class") != "hide" || tr[i].getAttribute("className") != "hide") {
				if (tr[i].getElementsByTagName("td").item(0).firstChild.nodeValue == TodayMonth && tr[i].getElementsByTagName("td").item(1).firstChild.nodeValue.split(" ")[0] == TodayDay) {
					document.getElementById('today').innerHTML = document.getElementById('today').innerHTML + tr[i].getElementsByTagName("td").item(2).firstChild.nodeValue + " ("+tr[i].getElementsByTagName("td").item(3).innerHTML+ ")<br />";
					var showtodaytitle=true;
				}
			}
		}
		if(showtodaytitle==true){
		document.getElementById('todaytitle').removeAttribute("className");
		document.getElementById('todaytitle').removeAttribute("class");
		document.getElementById('todaytitle').appendChild(todaytext);
		}
	}
}
addLoadEvent(zebraStripes);
function zebraStripes() {
	var tr = document.getElementById("calendar").getElementsByTagName("tr");
	var odd = true;
	for (var i = 0; i < tr.length; i++) {
		if (i > 1) {
			if ((tr[i].getAttribute("class") != "month" || tr[i].getAttribute("className") != "month") && (tr[i].getAttribute("class") != "hide" || tr[i].getAttribute("className") != "hide")) {
				if (odd) {
					tr[i].style.background = "#f4f4f4";
					odd = false;
				}
				else {
					odd = true;	
					tr[i].style.background = "#fff";
				}
			}
		}
	}
}
addLoadEvent(hideDetails);
function hideDetails(){
var trdiv = document.getElementById("calendar").getElementsByTagName("p");
for (var i = 0; i < trdiv.length; i++) {
	trdiv[i].setAttribute('class','hide');
	trdiv[i].setAttribute('className','hide');
}
var Detbutton = document.createElement("input");
	Detbutton.setAttribute("value","Show all event descriptions");
	Detbutton.setAttribute("id","detailsButton");
	Detbutton.setAttribute("type","button");
	Detbutton.onclick = function() {
		showAllDetails(this);
	}
var spacer = document.createTextNode(" ");
document.getElementById("reset").appendChild(Detbutton);
document.getElementById("reset").insertBefore(spacer,document.getElementById("detailsButton"));
}

function showAllDetails(showbutton){
var trdiv = document.getElementById("calendar").getElementsByTagName("p");
for (var i = 0; i < trdiv.length; i++) {
	trdiv[i].removeAttribute("className");
	trdiv[i].removeAttribute("class");
	trdiv[i].parentNode.getElementsByTagName('a')[0].innerHTML = "&ndash;";
	}
showbutton.setAttribute("value","Hide all event descriptions");
showbutton.onclick = function() {
		hideAllDetails(this);
	}
}

function hideAllDetails(showbutton){
var trdiv = document.getElementById("calendar").getElementsByTagName("p");
for (var i = 0; i < trdiv.length; i++) {
	trdiv[i].setAttribute("className","hide");
	trdiv[i].setAttribute("class","hide");
	trdiv[i].parentNode.getElementsByTagName('a')[0].innerHTML = "+";
	}
showbutton.setAttribute("value","Show all event descriptions");
showbutton.onclick = function() {
		showAllDetails(this);
	}
}
addLoadEvent(insertLink);
function insertLink(){
	var trp = document.getElementById("calendar").getElementsByTagName("p");
	for (var i = 0; i < trp.length; i++) {
		if(trp[i].firstChild.nodeValue!=""){
		detailsLink = document.createElement("a");
		detailsText=document.createTextNode('+');
		detailsLink.appendChild(detailsText);
		detailsLink.onclick = function(){
			showdetail(this);
			return false;
		};
		detailsLink.setAttribute('href','#');
		detailsLink.setAttribute('title','Click for more details');
		detailsLink.setAttribute('class','moreDetails');
		detailsLink.setAttribute('className','moreDetails');
		trp[i].parentNode.insertBefore(detailsLink,trp[i]);
		}

	}
}


function showdetail(showy){
	var myElement = showy.parentNode.getElementsByTagName('p')[0]
	if(myElement.getAttribute("class") == "hide" || myElement.getAttribute("className") == "hide")
	{
	myElement.removeAttribute("className");
	myElement.removeAttribute("class");	
	showy.innerHTML = "&ndash;";
	}
	else{
	myElement.setAttribute("className","hide");
	myElement.setAttribute("class","hide");	
	showy.innerHTML = "+";
		
	}
}