/**** Author: Tinna Karen @ 10. Nov 2006 *****

Usage: 

in the html code place a div with id = cal_container 
and then call the createCalendar function

Example:

<div id="cal_container"></div>
<script>createCalendar('2','2006','is','0','5','0','cal_container')</script>

*****/


/*** function: createCalendar 

This is the initital function to call
It takes 5 parameters:
1. month - month to display in the calendar (format: d (1-12))
2. year - year to display in the calendar (format: yyyy);
3. lang - language to use for calendar headers
	is - for icelandic
	en - for english
	se - for swedish
4. border - value for the table border [0,1]
5. container id - value of the div which the calendar should be generated into

Use CSS for other attributes

Example:

#cal_container table {}
#cal_container table td {}
#cal_container table th {}

****/

// Detect if the browser is IE or not.
// If it is not IE, we assume that the browser is NS.
var ie	= document.all;
var ns6	= document.getElementById&&!document.all;
var lang = "is";

function createCalendar(month,year,language,border,container_id)
{
	var selDate = new Date();
	var selMonth = selDate.getMonth() + 1;
	var selYear = selDate.getFullYear();
	var lang = language;
	
	if(!(selMonth == month && selYear == year))
	{
		selMonth = month;
		selYear = year;
	}
	
	var firstDate = new Date()
	firstDate.setFullYear(selYear,selMonth-1,1);
	
	buildCalendar(container_id,firstDate.getDay(),lang,border,month,year);
}

function isToday(day, month, year)
{
	var today = new Date();
	var todayDate = today.getDate();
	var todayMonth = today.getMonth() + 1;
	var todayYear = today.getFullYear();
	
	if(todayDate == day && todayMonth == month && todayYear == year)
		return true;
	else
		return false;
}

function buildCalendar(container_id,weekday,lang,border,month,year)
{
	var container = document.getElementById(container_id);
	
	var tbl_cal = document.createElement("table");
	tbl_cal.setAttribute("border",border);
	tbl_cal.setAttribute("cellSpacing","0");
	tbl_cal.setAttribute("cellPadding","0");
	tbl_cal.setAttribute("align","center");
	
	var tbl_header = document.createElement("thead");
	var tbl_body = document.createElement("tbody");

	var dayCount = 1;
	var cellCount = 0;
	
	//fill in the headers
	if(lang == "is")
		var weekArray = new Array("S", "M", "Þ", "M", "F", "F", "L");
	else if(lang == "se")
		var weekArray = new Array("S", "M", "T", "O", "T", "F", "L");
	else 
		var weekArray = new Array("S", "M", "T", "W", "T", "F", "S"); 
		
	var weekClasses = new Array("weekend","weekday","weekday","weekday","weekday","weekday","weekend");
	
	var tbl_row_1 = document.createElement("tr");
	tbl_row_1.setAttribute("id","row_1");
	
	for(i = 0; i < 7; i++)
	{
		var th_elm = document.createElement("th");
		th_elm.className = weekClasses[i];
		th_elm.innerHTML = weekArray[i];
		tbl_row_1.appendChild(th_elm);
	}
	
	tbl_header.appendChild(tbl_row_1);
	tbl_cal.appendChild(tbl_header);
	
	
	var tbl_row_2 = document.createElement("tr");
	tbl_row_2.setAttribute("id","row_2");	
	
	//put fillers in the first date row
	for(i = 0; i < weekday; i++)
	{
		var td_elm = document.createElement("td");
		td_elm.innerHTML = "&nbsp";
			
		tbl_row_2.appendChild(td_elm);
		cellCount++;
	}
	
	//fill in the dates in the first date row
	for(i = weekday; i < 7; i++)
	{
		var td_elm = document.createElement("td");
		td_elm.setAttribute("id","date_" + dayCount);
		td_elm.innerHTML = dayCount;
		
		if(isToday(dayCount,month,year))
			td_elm.className = "today";
		
		tbl_row_2.appendChild(td_elm);
		dayCount++;
		cellCount++;
	}
	
	tbl_body.appendChild(tbl_row_2);
	
	
	//fill the rest of the rows up to the last day of the month
	
	var breakpoint = false;
	var lastDayOfMonth = 31;
	
	var isLeapYear = (year%4==0)^(year%100==0)^(year%400==0);
	
	if(month == 2)
	{
		if(isLeapYear)
			lastDayOfMonth = 29;
		else
			lastDayOfMonth = 28;
	}
	else if(month == 4 || month == 6 || month == 9 || month == 11)
	{
		lastDayOfMonth = 30;
	}	
	
	for(i = dayCount; i < lastDayOfMonth; i++)
	{
		var tr_elm = document.createElement("tr");
		
		for(j = 0; j < 7; j++)
		{
			if(dayCount > lastDayOfMonth)
				breakpoint = true;
			else
			{
				var td_elm = document.createElement("td");
				td_elm.setAttribute("id","date_" + dayCount);
				td_elm.innerHTML = dayCount;
				
				if(isToday(dayCount,month,year))
					td_elm.className = "today";
				
				tr_elm.appendChild(td_elm);
				cellCount++;
				dayCount++;
			}
		}
		
		if(breakpoint)
		{
			//fill up table before stopping
			var fill = 7-(cellCount % 7);
			
			if(fill != 7)
			{
				for(i = 0; i < fill; i++)
				{
					var td_elm = document.createElement("td");
					td_elm.innerHTML = "&nbsp";
					tr_elm.appendChild(td_elm);
				}	
				tbl_body.appendChild(tr_elm);
			}
			break;
		}
		else {	
			tbl_body.appendChild(tr_elm);
		}
	}	
		
	tbl_cal.appendChild(tbl_body);
	container.appendChild(tbl_cal);
}

function fillDate(day,obj)
{
	//remove 0 from day if it's 01-09
	if(day.substring(0,1) == "0")
	{
		day = day.substring(1,day.length);
	}

	var cell = document.getElementById("date_" + day);
	cell.className = "active";
	var div = document.createElement("div");
	div.className = "cell_data";

	div.innerHTML = document.getElementById(obj).innerHTML;
	cell.appendChild(div);
}

function getMouseY(e) {
	var tempY = 0;
	
	if (!ns6) { // grab the x-y pos.s if browser is IE
		tempY = event.clientY + document.body.scrollTop
	} else {  // grab the x-y pos.s if browser is NS
		tempY = e.pageY
    }  

	// catch possible negative values in NS4
	if (tempY < 0){tempY = 0}
	
	return tempY;
}

function getMouseX(e) {
	var tempX = 0;
	
	if (!ns6) { // grab the x-y pos.s if browser is IE
		tempX = event.clientX + document.body.scrollLeft
	} else {  // grab the x-y pos.s if browser is NS
		tempX = e.pageX
    }  

	// catch possible negative values in NS4
	if (tempX < 0){tempX = 0}
	
	return tempX;
}

function showOverlay(day) {
    var overlay = document.getElementById("over_" + day);
    overlay.style.pixelLeft = getMouseY;
	overlay.style.pixelTop = getMouseX;
	overlay.className = "show";
	
	setTimeout("hideOverlay('" + day + "')",5000);
}

function hideOverlay(day) {
	var overlay = document.getElementById("over_" + day);
	overlay.className = "overlay";
}

function fillDateNumber(day,obj,eventdate)
{
	//remove 0 from day if it's 01-09
	if(day.substring(0,1) == "0")
	{
		day = day.substring(1,day.length);
	}
	
	var ecevent = document.getElementById(obj);
	var dateArr = ecevent.innerHTML.split("|");	
	var cell = document.getElementById("date_" + day);
	cell.className = "active";
	
	if(cell != null)
	{
		if(cell.innerHTML != day) {
			cell.innerHTML = "";
			var link = document.createElement("a");
			var eclink = "?event=" + eventdate + "&list=1";
			
			if(dateArr.length > 1)
			{
				eclink = eclink + "&month=" + dateArr[0] + "&year=" + dateArr[1];
			}
			
			var event_hover = "Click here to see a list of events for this day";
			
			if(lang == "is")
				event_hover = "Smelltu hér til að sjá lista af atburðum fyrir þennan dag";
			else if(lang == "se")
				event_hover = "Click here to see a list of events for this day";
				
			link.title = event_hover;
			link.innerHTML = day;
			link.href = "javascript:showOverlay('" + day + "')";
			cell.appendChild(link);
			
			var overlay = document.getElementById("over_" + day);
			
			if(overlay != null)
			{				
				var overlay_text = document.createElement("h3");
				var overlay_link = document.createElement("a");
				overlay_link.innerHTML = ecevent.title;
				overlay_link.href = ecevent.href;
				overlay_text.appendChild(overlay_link);
				overlay.appendChild(overlay_text);
			}
		}
		else {
			cell.innerHTML = "";
			var link = document.createElement("a");
			link.title = ecevent.title;
			link.href = ecevent.href;
			link.innerHTML = day;
			cell.appendChild(link);
			
			var overlay = document.createElement("div");
			overlay.setAttribute("id","over_" + day);
			overlay.className = "overlay";
			
			var overlay_container = document.getElementById("overlay_container");
			
			var overlay_text = document.createElement("h3");
			var overlay_link = document.createElement("a");
			overlay_link.innerHTML = ecevent.title;
			overlay_link.href = ecevent.href;
			overlay_text.appendChild(overlay_link);
			
			overlay.appendChild(overlay_text);
			overlay_container.appendChild(overlay);
		}
	}
}