// JavaScript Document
// Created by Dennis Okparaocha
// Tool to define and create a calendar and populate it with events
// The files largecalendar.js and smallcalendar.js are called to draw the calendar page

window.onload = function(e)
{
	var date = new Date();
	
	if (location.search != "")
	{
		var x = location.search.substr(1).split("&")
		for (var i=0; i<x.length; i++)
		{
			var y = x[i].split("=");
			
			if(y[0] == "m")
			{
				date.setMonth(y[1]);
				continue;
			}
			
			if(y[0] == "y")
			{
				date.setYear(y[1]);
				continue;
			}
		}
	}	

	 var month = date.getMonth();
						 
	
	var year = date.getFullYear();

	// Draw the calendar specified by the html page calling this script
	
	if(document.getElementById("LargeCal")) createLargeCal(month, year);

	if(document.getElementById("SmallCal")) createSmallCal(month, year);
	
	updateDisplayMonthYear(month, year);
	
	// reset next and previous buttons
	switchMon(month, year);
	
	var events = new Events();
	
}

function updateDisplayMonthYear(month, year)
{
	// display month and year
	var date = new Date();
	
	date.setYear(year);
	date.setMonth(month);
	
	var display_month = document.getElementById("selected_month");
	var display_year = document.getElementById("selected_year");
	
	var mon = document.createTextNode(showMonth(month));
	var yr = document.createTextNode(year);
	
	// if user navigates to a different month, delete month and year displayed and then replace
	// then replace them with the new month and year
	
	if(display_month.hasChildNodes())
	{
		display_month.removeChild(display_month.lastChild);
		display_month.appendChild(mon);
	}
	else
	{
		display_month.appendChild(mon);
	}
	
	if(display_year.hasChildNodes())
	{
		display_year.removeChild(display_year.lastChild);
		display_year.appendChild(yr);
	}
	else
	{
		display_year.appendChild(yr);
	}
	
}

function SubText(text, sublen)
{
	// This function ensure that the text displayed for an event is not to long
	// and apends some dots
	if(text.length > sublen){
	
		return text.substring(0, sublen) + "...";
	}
	
	return text;
}

function Events(){
	//Defines an oject of type event with the following properties
	//event.getEventLength retuns the number of charcters of the event date
	//event.getContentLength returns the number of charecters of the full event content including links
	//event.get_a_tag returns the url to the page with the event content
	//event.getStrongContent returns the event title
	//event.getFullContent returns the first 150 charecters of the event descriptor in the h3 tags
	//event.getContent returns the same as getFullContent but only the first 100 charecters
	//event.getEvent returns the event date as a string
	//event.getEventDate returns the date of event as a date
// This reads the html page where all the events are shown and 
// splits the text, date and link apart depending on their style tag
	var events = document.getElementById("dates").getElementsByTagName("p");
	var content = document.getElementById("dates").getElementsByTagName("li");
	var a_tags = document.getElementById("dates").getElementsByTagName("a");
	//alert("events");
	this.getEventLength = function(){

		return events.length;
	
	}
	
	this.getContentLength = function(){

		return content.length;
	
	}
	
	this.get_a_tag = function(i){
	// find and return the event link
		var tags;
	
		if(document.all)
		{
			tags = a_tags[i].href; // only for ie
		}
		else
		{
			tags = a_tags[i].href; // only for firefox
		}
		
		return tags;
		
	}
	
	this.getStrongContent = function(i){
	// find and return the event title
		var eve = "";
	
		if(document.all)
		{
			eve = content[i].getElementsByTagName("strong")[0].innerText; // only for ie
		}
		else
		{
			eve = content[i].getElementsByTagName("strong")[0].textContent; // only for firefox
		}
						// Return a title with a charecter limit
							return SubText(eve, 100);
	}

	this.getFullContent = function(i){
	// find and return the event text
		var eve = "";
	
		if(document.all)
		{
			eve = content[i].getElementsByTagName("h3")[0].innerText; // only for ie
		}
		else
		{
			eve = content[i].getElementsByTagName("h3")[0].textContent; // only for firefox
		}
		// Ensure the event text is not longer than 150 charecters
							return SubText(eve, 150);
	}
	
	this.getContent = function(i){
	// find and return the event text
		var eve = "";
	
		if(document.all)
		{
			eve = content[i].getElementsByTagName("h3")[0].innerText; // only for ie
		}
		else
		{
			eve = content[i].getElementsByTagName("h3")[0].textContent; // only for firefox
		}
		// Ensure the event text is not longer than 150 charecters
		return SubText(eve, 100);
		
	}
	
	this.getEvent = function(i){
	// find and return the date
		var eve, year, month, day, regExp, dateArray;
		//alert ("get event running");
		var date = new Date();
	
		if(document.all)
		{
			eve = events[i].innerText; // only for ie
		}
		else
		{
			eve = events[i].textContent; // only for firefox
		}
		
		// Match dates of the form 01 Jan 1900

		var regExp = /^(\d+)\s(\w+)\s(\d+)/;
		
		// split date string into 3 pieces
		
		dateArray = eve.match(regExp);
		
		// Convert month from string to integer value
		
		switch (dateArray[2]){
		case "Jan":
			dateArray[2]=0;
			break;
		case "Feb":
			dateArray[2]=1;
			break;
		case "Mar":
			dateArray[2]=2;
			break;
		case "Apr":
			dateArray[2]=3;
			break;
		case "May":
			dateArray[2]=4;
			break;
		case "Jun":
			dateArray[2]=5;
			break;
		case "Jul":
			dateArray[2]=6;
			break;
		case "Aug":
			dateArray[2]=7;
			break;
		case "Sep":
			dateArray[2]=8;
			break;
		case "Oct":
			dateArray[2]=9;
			break;
		case "Nov":
			dateArray[2]=10;
			break;
		case "Dec":
			dateArray[2]=11;
			break;
		}
		
		// use the 3rd piece to set the year eg 2008
		date.setYear(dateArray[3]);
		
		// preset day of the month to be 1 to allow the month to be set next.
		date.setDate(1);
		
		// use the 2nd piece to set the month eg 07
		date.setMonth(dateArray[2]);
		
		// use the 1st piece to set the day of the month eg 31
		date.setDate(dateArray[1]);
		
		//date.setDate(3);
		//date.setMonth(8);
		//date.setYear(2008);
		//var fixdate = new Date();
		//return fixdate.toLocaleDateString();
		
		return date.toLocaleDateString();
		
	}
	
	this.getEventDate = function(i){
	// return event date
		var eve, year, month, day, regExp, dateArray;
		//alert ("geteventdate is launched");
		var date = new Date();
	
		if(document.all)
		{
			eve = events[i].innerText; // only for ie
		}
		else
		{
			eve = events[i].textContent; // only for firefox
		}
		
		
		// Match dates of the form 01 Jan 1900
		 var regExp = /^(\d+)\s(\w+)\s(\d+)/;
		
		// split date string into 3 pieces
		dateArray = eve.match(regExp);
		
		// Convert month from string to numerical
		switch (dateArray[2]){
		case "Jan":
			dateArray[2]=0;
			break;
		case "Feb":
			dateArray[2]=1;
			break;
		case "Mar":
			dateArray[2]=2;
			break;
		case "Apr":
			dateArray[2]=3;
			break;
		case "May":
			dateArray[2]=4;
			break;
		case "Jun":
			dateArray[2]=5;
			break;
		case "Jul":
			dateArray[2]=6;
			break;
		case "Aug":
			dateArray[2]=7;
			break;
		case "Sep":
			dateArray[2]=8;
			break;
		case "Oct":
			dateArray[2]=9;
			break;
		case "Nov":
			dateArray[2]=10;
			break;
		case "Dec":
			dateArray[2]=11;
			break;
		}
		//End insert by PR
		
		// use the 3rd piece to set the year eg 2008
		date.setYear(dateArray[3]);
		
		// preset day of the month to be 1 to allow the month to be set next.
		date.setDate(1);
		
		// use the 2nd piece to set the month eg 07
		date.setMonth(dateArray[2]);
		
		// use the 1st piece to set the day of the month eg 31
		date.setDate(dateArray[1]);
		
		//date.setDate(2);
		//date.setMonth(8);
		//date.setYear(2008);
		//var fixdate = new Date();
		//return fixdate;
		return date;
		
	}
}

function switchMon(x, y)
{
	// Sets the correct months for the prev and next links	
	updateDisplayMonthYear(x, y);
	
	var prev = x - 1;
	var next = x + 1;
	
	if(x == 0)
		// check to see if we have hit current month as January
	{
		next = 1;
		prev = 11;
	}
	
	if(x == 11)
	{
		// check to see if we have hit current month as December
		next = 0;
		prev = 10;
	}
	
	document.getElementById("nex").onclick = function()
		{
		// Create Next link and check for year roll-over
			if(x == 11){y = y + 1;}
			if(document.getElementById("SmallCal")) createSmallCal(next, y);
			if(document.getElementById("LargeCal")) createLargeCal(next, y);
			switchMon(next, y);
			
			return false;
		}
		
	document.getElementById("pre").onclick = function()
		{
		// Create previous link and check for year roll-back
			if(x == 0){y = y - 1;}
			if(document.getElementById("SmallCal")) createSmallCal(prev, y);
			if(document.getElementById("LargeCal")) createLargeCal(prev, y);
			switchMon(prev, y);
			
			return false;
		}
}

function NextEvent()
{
	var events = new Events();
	var dates = new Array();
	var title = new Array();
	
	var k = 0;
	
	for(var i = 0; i < events.getEventLength(); i++)
	{
		if(Compare(events.getEventDate(i)))
		{
			dates[k] = events.getEventDate(i);
			title[k] = events.getFullContent(i);
			k++;
		}
	}
	
	var Nextevent = dates[0];
	var Nextcontent;
	
	for(var j = 0; j < dates.length; j++)
	{
		if(nextDate(dates[j]) <= nextDate(Nextevent))
		{
			Nextevent = dates[j];
			Nextcontent = title[j];
		}
		
	}
	
	this.getNEC = function()
	{
		return Nextcontent;	
	}
	
	this.getNED = function()
	{
		return Nextevent;
	}
}


function showNextEvent()
{
	var events = new Events();
	var date = new Date();
	
		var eventtop = document.getElementById("diary");
		var calhead = document.getElementById("calheading");
		var eventdetail = document.getElementById("eventdetails");
	
	if(events.getEventLength() > 0)
	{
	
	var nextE = new NextEvent();
		
		var NED = nextE.getNED();
		var NEC = nextE.getNEC();
		
		if(NED)
		{
			var contentText = document.createTextNode(NEC);
			var todayText = document.createTextNode("Todays Event(s)");
			
			//eventdetail.appendChild(contentText);
			
			var all_events = new getAllEventsIn();
			
			while (eventdetail.hasChildNodes())
			{
				eventdetail.removeChild(eventdetail.lastChild);
			}
			
			eventdetail.appendChild(all_events.eventContentCol(NED));
			
			eventtop.style.display = "block";
		
			var dateText = document.createTextNode("Next: " + showdatestring(NED));
			
			if(nextDate(NED) == nextDate(date))
			{
				while (calhead.hasChildNodes())
				{
					calhead.removeChild(calhead.lastChild);
				}
				calhead.appendChild(todayText);
			}
			else
			{
				while (calhead.hasChildNodes())
				{
					calhead.removeChild(calhead.lastChild);
				}
				calhead.appendChild(dateText);
									
// eventtop.style.background = "url(/assets/uploads/yelloweventbackground.gif)";

			}
		
		}
	}
}
	
function showdatestring(date)
{
	return date.getDate() + " " + showMonth(date.getMonth()) + " " + date.getFullYear();
}
		
function showMonth(m, y)
{
	// Returns the month name when supplied with the month number 0 - 11, e.g 0 returns January 
	
	var month = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	
	return month[m];
}

function nextDate(x)
{
	// Converts a date into a numerial value so that it can be compared
	return x.getFullYear()*10000 + x.getMonth()*100 + x.getDate();
}

function Compare(y)
{
	// Takes a date and looks to see if it is before today's date
	// This is achived by converting the dates to a numerical value using the function nextDate(x)
	var today = new Date();

	if(nextDate(today) <= nextDate(y))
	{
		return true;
	}
	
	return false;

} 
