var dayWidth = 52;
var dayHeight = 38;

var widthSmudge = 0;
var heightSmudge = 0;

var testing = true;


var dayOffset = 20;


var months=new Array();
months[-2]="November";
months[-1]="December";
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";
months[12]="January";
months[13]="February";

var eventsList = new Array();
var eventsArray = new Array();

function daysInMonth(iMonth, iYear)
{
	return 32 - new Date(iYear, iMonth, 32).getDate();
}

function dayOfWeek(iMonth, iDay, iYear)
{
	return new Date(iYear, iMonth, iDay).getDay();
}

function getMonthName(month)
{
	return months[month];
}


function drawMonth(month, day, year)
{

	var daysThisMonth = daysInMonth(month, year);
var out = '';
//	var out = '<div style=\"width:100px; float: left;\"><a onClick=\"showEvents('+(month-1)+', '+year+')\">&lt;- '+getMonthName(month-1)+'</a></div><div style=\"float: left; width: 164px; text-align: center;\">'+getMonthName(month)+' '+year+'</div><div style=\"width:100px; float: right; text-align: right;\"><a onClick=\"showEvents('+(month+1)+', '+year+')\">'+getMonthName(month+1)+'-&gt;</a></div><br style=\"clear: both;\" />\n';
	var week = 1;
	var dayi = 1;
	var dow = dayOfWeek(month, dayi, year);
	var i = dow;
	var lookThisMonth = true;
	if(!eventsArray[year])
	{
		lookThisMonth = false;
	}
	else if(!eventsArray[year][month])
	{
		lookThisMonth = false;
	}
	for(daylabel=0; daylabel<7; daylabel++)
	{
		out = out+'<div class=="date\" style=\"position: absolute; top:'+((week*dayHeight)-15)+'px; left:'+(daylabel*dayWidth)+'px\"><img src="calendar_images/dowlabel'+daylabel+'.gif" /></div>\n';
	}
	if(i != 0)
	{
		for(ii=0; ii<i; ii++)
		{
			out = out+'<div class=\"date\" style=\"position: absolute; top:'+(week*dayHeight)+'px; left:'+(ii*dayWidth)+'px\"><img src="calendar_images/d00.gif" width="50px;" height="36px" /></div>\n';
		}
	}
	while(dayi<=daysThisMonth)
	{
		if(i==7)
		{
			i=0;
			week++;
		}
		if(lookThisMonth)
		{
			if(!eventsArray[year][month][dayi])
			{
				if(dayi == day)
				{
					out = out+'<div class=\"date\" style=\"position: absolute; top:'+(week*dayHeight)+'px; left:'+(i*dayWidth)+'px;\"><img src="calendar_images/s'+dayi+'.gif" width="50px;" height="36px;" /></div>\n';
				}
				else
				{
					out = out+'<div class=\"date\" style=\"position: absolute; top:'+(week*dayHeight)+'px; left:'+(i*dayWidth)+'px;\"><img src="calendar_images/d'+dayi+'.gif" width="50px;" height="36px;" /></div>\n';
				}
			}
			else
			{
				if(dayi == day)
				{
					out = out+'<div class=\"date\" style=\"font-weight: bold; position: absolute; top:'+(week*dayHeight)+'px; left:'+(i*dayWidth)+'px\"><a onClick=\"showEvents('+month+', '+year+', '+dayi+')\"><img onMouseOut="unhoverEvent(this, \''+dayi+'\', true)" onMouseOver="hoverEvent(this, \''+dayi+'\', true)" src="calendar_images/se'+dayi+'.gif" width="50px;" height="36px;" /></a></div>\n';
				}
				else
				{
					out = out+'<div class=\"date\" style=\"font-weight: bold; position: absolute; top:'+(week*dayHeight)+'px; left:'+(i*dayWidth)+'px\"><a onClick=\"showEvents('+month+', '+year+', '+dayi+')\"><img onMouseOut="unhoverEvent(this, \''+dayi+'\')" onMouseOver="hoverEvent(this, \''+dayi+'\')" src="calendar_images/ev'+dayi+'.gif" width="50px;" height="36px;" /></a></div>\n';
				}
			}
		}
		else
		{
				if(dayi == day)
				{
					out = out+'<div class=\"date\" style=\"position: absolute; top:'+(week*dayHeight)+'px; left:'+(i*dayWidth)+'px;\"><img src="calendar_images/s'+dayi+'.gif" width="50px;" height="36px;" /></div>\n';
				}
				else
				{
					out = out+'<div class=\"date\" style=\"position: absolute; top:'+(week*dayHeight)+'px; left:'+(i*dayWidth)+'px;\"><img src="calendar_images/d'+dayi+'.gif" width="50px;" height="36px;" /></div>\n';
				}
		}
		dayi++;
		i++;
	}
	if(i != 7)
	{
		for(ii=i; ii<7; ii++)
		{
			out = out+'<div class=\"date\" style=\"position: absolute; top:'+(week*dayHeight)+'px; left:'+(ii*dayWidth)+'px\"><img src="calendar_images/d00.gif" width="50px;" height="36px" /></div>\n';
		}
	}
	calendar = document.getElementById("monthView");
	calendar.innerHTML = out;
}
/*

function drawMonth(month, day, year)
{

	var daysThisMonth = daysInMonth(month, year);

	var out = '<div style=\"width:40%; float: left;\"><a onClick=\"showEvents('+(month-1)+', '+year+')\">&lt;- '+getMonthName(month-1)+'</a></div><div style=\"float: left; width: 20%; text-align: center;\">'+getMonthName(month)+' '+year+'</div><div style=\"width:40%; float: right; text-align: right;\"><a onClick=\"showEvents('+(month+1)+', '+year+')\">'+getMonthName(month+1)+'-&gt;</a></div><br style=\"clear: both;\" />\n';
	
	var week = 1;
	var dayi = 1;
	var dow = dayOfWeek(month, dayi, year);
	var i = dow;
	var lookThisMonth = true;
	if(!eventsArray[year])
	{
		lookThisMonth = false;
	}
	else if(!eventsArray[year][month])
	{
		lookThisMonth = false;
	}
	if(i != 0)
	{
		for(ii=0; ii<i; ii++)
		{
			out = out+'<div class=\"date\" style=\"width:'+dayWidth+'px; height:'+dayHeight+'px; border:thin dashed; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(ii*dayWidth)+'px\"></div>\n';
		}
	}
	while(dayi<=daysThisMonth)
	{
		if(i==7)
		{
			i=0;
			week++;
		}
		
		// is there a story this month?
		if(lookThisMonth)
		{
			// is there no story today?
			if(!eventsArray[year][month][dayi])
			{
				// is the date bein evl today
				if(dayi == day)
				{
					out = out+'<div class=\"date\" style=\"color:#00ae42; width:'+dayWidth+'px; height:'+dayHeight+'px; border:thin dashed; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(i*dayWidth)+'px;\">'+dayi+'</div>\n';
				}
				
				
				else
				{
					out = out+'<div class=\"date\" style=\"width:'+dayWidth+'px; height:'+dayHeight+'px; border:thin dashed; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(i*dayWidth)+'px;\">'+dayi+'</div>\n';
				}
			}
			
			// there is a story
			else
			{
				
				if(dayi == day)
				{
					//<a onClick=\"showEvents('+month+', '+year+', '+dayi+')\"></a>
					out = out+'<div class=\"date\" style=\"width:'+dayWidth+'px; height:'+dayHeight+'px; border: thin dashed; font-weight: bold; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(i*dayWidth)+'px;\">'+dayi+'</div>\n';
					//<img onMouseOut="unhoverEvent(this, \''+dayi+'\', true)" onMouseOver="hoverEvent(this, \''+dayi+'\', true)" src="calendar_images/se'+dayi+'.gif" width="50px;" height="36px;" />
				}
				else
				{					
					out = out+'<div onClick=\"showEvents('+month+', '+year+', '+dayi+')\" class=\"date\" style=\"color: #79dea8; width:'+dayWidth+'px; height:'+dayHeight+'px; border:thin dashed; font-weight: bold; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(i*dayWidth)+'px;\">'+dayi+'</div>\n';
				}
			}
		}
		
		// no story this month
		else
		{	
			if(dayi == day)
			{
				out = out+'<div class=\"date\" style=\"width:'+dayWidth+'px; height:'+dayHeight+'px; border:thin dashed; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(i*dayWidth)+'px;\">'+dayi+'</div>\n';
			}
			else
			{
				out = out+'<div class=\"date\" style=\"width:'+dayWidth+'px; height:'+dayHeight+'px; border:thin dashed; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(i*dayWidth)+'px;\">'+dayi+'</div>\n';
			}
		}
		dayi++;
		i++;
	}
	
	// draw more if not the end
	if(i != 7)
	{
		for(ii=i; ii<7; ii++)
		{
			out = out+'<div class=\"date\" style=\"width:'+dayWidth+'px; height:'+dayHeight+'px; border:thin dashed; position: absolute; top:'+(dayOffset+(week*dayHeight))+'px; left:'+(ii*dayWidth)+'px;\"></div>\n';
		}
	}
	
	out = out+'<br style=\"clear: both;\" />';
	calendar = document.getElementById("monthView");
	calendar.innerHTML = out;
}
*/

function doGetCalendar()
{
	getCalendarEventsFromServer();

}

function GetXmlHttpObject()
{
/*
        //generic ajax object function
        var objXMLHttp=null
        if (getBrowserName() == 'msie')
        {
		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");                
        }
        else
        {
		objXMLHttp=new XMLHttpRequest();             
        }
        return objXMLHttp;

*/

	var xmlhttpobj;
	if (window.XMLHttpRequest)
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttpobj=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		// code for IE6, IE5
		xmlhttpobj=new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		alert("Your browser does not support XMLHTTP!");
	}
	return xmlhttpobj;

}


function getCalendarEventsFromServer()
{
        xmlHttp = GetXmlHttpObject();

        xmlHttp.onreadystatechange=function()
        {
                if(xmlHttp.readyState==4)
                {
			//alert(dump(xmlHttp.responseText));
			eventsList = eval(xmlHttp.responseText);
			processEvents();
                }
        }

        //xmlHttp.open("GET", "http://pc81026.d.cwu.edu/scotland/events/view_json.php", true);
	xmlHttp.open("GET", "view_json.php?fixcache="+new Date().getTime(), true);
        xmlHttp.send(null);

}

function processEvents()
{

	listlength = eventsList.length;
	for(i=0; i<listlength; i++)
	{
		sdate = new Date();
		sdate.setDate(eventsList[i].startdate.day);
		sdate.setMonth(eventsList[i].startdate.month);
		sdate.setFullYear(eventsList[i].startdate.year);
		
		edate = new Date();
		edate.setDate(eventsList[i].enddate.day);
		edate.setMonth(eventsList[i].enddate.month);
		edate.setFullYear(eventsList[i].enddate.year);
		for(ii=sdate.getDate(); ii<=edate.getDate(); ii++)
		{
			if(!eventsArray[sdate.getFullYear()])
			{
				eventsArray[sdate.getFullYear()] = new Array();
			}
			if(!eventsArray[sdate.getFullYear()][sdate.getMonth()])
			{
				eventsArray[sdate.getFullYear()][sdate.getMonth()] = new Array();
			}
			if(!eventsArray[sdate.getFullYear()][sdate.getMonth()][ii])
			{
				eventsArray[sdate.getFullYear()][sdate.getMonth()][ii] = new Array();
			}
			count = eventsArray[sdate.getFullYear()][sdate.getMonth()][ii].length;
			eventsArray[sdate.getFullYear()][sdate.getMonth()][ii][count] = i;
		}
	}
	date = new Date();
	showEvents(date.getMonth(), date.getFullYear(), date.getDate())
}

function showEvents(month, year, day)
{
	drawWindow();
	var myDate=new Date()
	if(!day)
	{
		day = 1;
	}
	if(!year)
	{
		year = myDate.getFullYear();
	}
	if(month < 0)
	{
		month += 12;
		year--;
	}
	if(month > 11)
	{
		month -= 12;
		year++;
	}
	highlightMonths(month);
	drawMonth(month, day, year);
	listEvents(month, day, year);
}



function highlightMonths(month)
{
		
	jan = document.getElementById('january_month');
	feb = document.getElementById('february_month');
	mar = document.getElementById('march_month');
	apr = document.getElementById('april_month');
	may = document.getElementById('may_month');
	jun = document.getElementById('june_month');
	jul = document.getElementById('july_month');
	aug = document.getElementById('august_month');
	sep = document.getElementById('september_month');
	oct = document.getElementById('october_month');
	nov = document.getElementById('november_month');
	dec = document.getElementById('december_month');

	jan.src="calendar_images/january_gr.gif";
	feb.src="calendar_images/february_gr.gif";
	mar.src="calendar_images/march_gr.gif";
	apr.src="calendar_images/april_gr.gif";
	may.src="calendar_images/may_gr.gif";
	jun.src="calendar_images/june_gr.gif";
	jul.src="calendar_images/july_gr.gif";
	aug.src="calendar_images/august_gr.gif";
	sep.src="calendar_images/september_gr.gif";
	oct.src="calendar_images/october_gr.gif";
	nov.src="calendar_images/november_gr.gif";
	dec.src="calendar_images/december_gr.gif";

	if (month == 0)
	{
		jan.src="calendar_images/january_b.gif";
	}
	else if(month == 1)
	{
		feb.src="calendar_images/february_b.gif";
	}
	else if(month == 2)
	{
		mar.src="calendar_images/march_b.gif";
	}
	else if(month == 3)
	{
		apr.src="calendar_images/april_b.gif";
	}
	else if(month == 4)
	{
		may.src="calendar_images/may_b.gif";
	}
	else if(month == 5)
	{
		jun.src="calendar_images/june_b.gif";
	}
	else if(month == 6)
	{
		jul.src="calendar_images/july_b.gif";
	}
	else if(month == 7)
	{
		aug.src="calendar_images/august_b.gif";
	}
	else if(month == 8)
	{
		sep.src="calendar_images/september_b.gif";
	}
	else if(month == 9)
	{
		oct.src="calendar_images/october_b.gif";
	}
	else if(month == 10)
	{
		nov.src="calendar_images/november_b.gif";
	}
	else if(month == 11)
	{
		dec.src="calendar_images/december_b.gif";
	}
}


function drawWindow()
{
	var calendarHolder = document.getElementById("calendarHolder");
	calendarHolder.innerHTML = "<div class=\"monthView\" id=\"monthView\" style=\"position: relative; float: left; width:370px; height: 100%;\">calendar month view</div><div class=\"listView\" id=\"listView\" style=\"height: 100%; margin-left:450px;\"></div>";
}


function listEvents(month, day, year)
{
	var lookThisMonth = true;
	var daysThisMonth = daysInMonth(month, year);
	eventsdiv = document.getElementById('eventsdesc');
	
	// If (no stories this year)
	if(!eventsArray[year])
	{
			// dont look
		lookThisMonth = false;
	}
	// No events this month
	else if(!eventsArray[year][month])
	{
			// dont look
		lookThisMonth = false;
	}
	
	// if look
	if(lookThisMonth)
	{
		var outputDates = new Array();
		var outputEvents = new Array();
		out = '';
		for(dayi=day; dayi<=daysThisMonth; dayi++)
		{
			if(eventsArray[year][month][dayi])
			{
				// if there is an event on this day
				var arrayLength = eventsArray[year][month][dayi].length;

				for(iiii=0; iiii<arrayLength; iiii++)
				{
					if(!user_in_array(outputEvents, eventsArray[year][month][dayi][iiii]))
					{
						outputDates[outputDates.length] = eventsList[eventsArray[year][month][dayi][iiii]];
						outputEvents[outputEvents.length] = eventsArray[year][month][dayi][iiii];
					}
				}
			}
		}
		outputdateslength = outputDates.length;
		for(i=0; i<outputdateslength; i++)
		{
			out += "<div class=\"eventListItem\"><h1>"+outputDates[i].eventname+"</h1><p class=\"eventDates\">"+outputDates[i].eventdatesdesc+"</p><p>"+outputDates[i].eventdescription+"</p></div>";
//			out += "<div><div style=\"width:100px; float: left;\"><p class=\"eventDates\">"+outputDates[i].eventdatesdescshort+"</p></div><div style=\"width: 360px;\"><p>"+outputDates[i].eventname+"</p></div><br style=\"clear: left;\"/></div>";
//			out += "<div><div style=\"width: 360px;\"><p>"+outputDates[i].eventname+"</p></div><div style=\"width:100px; float: left;\"><p class=\"eventDates\">"+outputDates[i].eventdatesdescshort+"</p></div><br style=\"clear: left;\"/></div>";
		}
	}
	else
	{
		out = '<div class="eventListItem"><h1>There are no events this month.</h1></div>';
	}

	eventsdiv.innerHTML = out;	

}


/*
function listEvents(month, day, year)
{
	var out = '<br /><br />';
	var lookThisMonth = true;
	var daysThisMonth = daysInMonth(month, year);
	eventsdiv = document.getElementById('eventsdesc');
	if(!eventsArray[year])
	{
		lookThisMonth = false;
	}
	else if(!eventsArray[year][month])
	{
		lookThisMonth = false;
	}
	if(lookThisMonth)
	{
		var dayi = day;
		var outputDates = new Array();
		while(dayi<=daysThisMonth)
		{
			if(eventsArray[year][month][dayi])
			{
				var dateHits = new Array();
				var arrayLength = eventsArray[year][month][dayi].length;
				for(i=0; i<arrayLength; i++)
				{
					if(dateHits[eventsList[eventsArray[year][month][dayi][i]].startdate.day])
					{
						if(!user_in_array(outputDates, eventsArray[year][month][dayi][i]))
						{
							dateHits[eventsList[eventsArray[year][month][dayi][i]].startdate.day][out[eventsList[eventsArray[year][month][dayi][i]].startdate.day].length] = eventsArray[year][month][dayi][i];
							outputDates[outputDates.length] = eventsArray[year][month][dayi][i];
						}
					}
					else
					{
						if(!user_in_array(outputDates, eventsArray[year][month][dayi][i]))
						{
							if(eventsArray[year][month][dayi][i])
							{
								dateHits[eventsList[eventsArray[year][month][dayi][i]].startdate.day] = new Array();
								dateHits[eventsList[eventsArray[year][month][dayi][i]].startdate.day][0] = eventsArray[year][month][dayi][i];
								outputDates[outputDates.length] = eventsArray[year][month][dayi][i];
							}
							else
							{
								testout = document.getElementById("test");
								testout.innerHTML = dump(eventsArray[year][month][dayi]);
							}
						}
					}
				}
			}
			dayi++;
		}
		for(i=0; i<outputDates.length; i++)
		{
			out = out+'<div class=\"eventDescription\"><img src="calendar_images/ev'+eventsList[outputDates[i]].startdate.day+'.gif" /><p>'+eventsList[outputDates[i]].name+'</p></div>';
		}
		
	}
	else
	{
		out = 'No events this month';
	}

	eventsdiv.innerHTML = out;	
}

*/
/*

function listEvents(month, day, year)
{
	var lookThisMonth = true;
	var daysThisMonth = daysInMonth(month, year);

	mainContentdiv = document.getElementsByTagName('div');
	for(i=0; i<mainContentdiv.length; i++)
	{
		if(mainContentdiv[i].id == "content")
		{
			eventsdiv = mainContentdiv[i];
		}
	
	}


	eventsdiv = document.getElementById('eventsdesc');
	
	// If (no stories this year)
	if(!eventsArray[year])
	{
		if(testing)
		{
			alert('no events this year');
		}
			// dont look
		lookThisMonth = false;
	}
	// No events this month
	else if(!eventsArray[year][month])
	{
		if(testing)
		{
			alert('no events this month');
		}
			// dont look
		lookThisMonth = false;
	}
	
	// if look
	if(lookThisMonth)
	{
		if(testing)
		{
			alert('events this month');
		}
		// what is outputdates?
		var outputDates = new Array();
		out = '';
			if(eventsArray[year])
			{
				if(testing)
				{
					alert('events this year: '+year);
				}
				if(eventsArray[year][month])
				{
					if(testing)
					{
						alert('events this month: '+month);
					}
					if(eventsArray[year][month][day])
					{
						if(testing)
						{
							alert('events today: '+day);
						}
						// if there is an story on this day
						if(eventsArray[year][month][day].length)
						{

							var arrayLength = eventsArray[year][month][day].length;
							if(testing)
							{
								alert(arrayLength+' events today.');
							}
							for(i=0; i<arrayLength; i++)
							{
								if(eventsArray[year][month][day][i])
								{
									if(eventsList[eventsArray[year][month][day][i]].name)
									{
										outputDates[outputDates.length] = eventsList[eventsArray[year][month][day][i]].name;
									}
								}
							}
						}
					for(i=0; i<outputDates.length; i++)
					{
						out = out+outputDates[i];
					}
					}
				}
			}
	}
	else
	{
		out = 'No events this month.';
	}

	eventsdiv.innerHTML = out;	

}

*/


function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;

//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += "    ";

if(typeof(arr) == 'object') { //Array/Hashes/Objects
 for(var item in arr) {
  var value = arr[item];
 
  if(typeof(value) == 'object') { //If it is an array,
   dumped_text += level_padding + "'" + item + "' ...\n";
   dumped_text += dump(value,level+1);
  } else {
   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
  }
 }
} else { //Stings/Chars/Numbers etc.
 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
} 






function user_in_array(haystack, needle)
{
	for(i=0; i<haystack.length; i++)
	{
		if(haystack[i] == needle)
		{
			return true;
		}
	}
	return false;
}

function hoverEvent(image, date, today)
{
	if(today)
	{
		image.src="calendar_images/he"+date+".gif";
	}
	else
	{
		image.src="calendar_images/he"+date+".gif";
	}
}

function unhoverEvent(image, date, today)
{
	if(today)
	{
		image.src="calendar_images/se"+date+".gif";
	}
	else
	{
		image.src="calendar_images/ev"+date+".gif";
	}
}

function getBrowserName()
{
	var browserName = "";
	
	var ua = navigator.userAgent.toLowerCase();

	if ( ua.indexOf( "opera" ) != -1 )
	{
		browserName = "opera";
	}
	else if ( ua.indexOf( "msie" ) != -1 )
	{
		browserName = "msie";
	}
	else if ( ua.indexOf( "safari" ) != -1 )
	{
		browserName = "safari";
	}
	else if ( ua.indexOf( "mozilla" ) != -1 )
	{
		if ( ua.indexOf( "firefox" ) != -1 )
		{
			browserName = "firefox";
		}
		else
		{
			browserName = "mozilla";
		}
	}
	
	return browserName;
}

/*


new Date()
new Date(milliseconds)
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds) //most parameters here are optional. Not specifying causes 0 to be passed in.


*/
window.onload=doGetCalendar;
