/*
	TODO
	[X] Rita ut den 1e på rätt dag
	[X] Endast visa så många dagar som månaden har
	[X] Göra markerade dagar klickbara
	[X] Fixa navigeringen i kalendern
	[ ]	Bryta ut renderingen av en dag med ett event
	[X] Fixa bug som uppstår när Söndag är första dagen i månaden
	[X] Fixa postback-cache problem
*/

function Calendar(objectId)
{
	this.control = 
		document.getElementById(objectId);

	this.calendarBody =
		this.control.getElementsByTagName("tbody")[0];

	this.calendarHead =
		this.control.getElementsByTagName("tfoot")[0];
	
	this.itemCreated = null;
	this.data = null;
	
	//
	
	var re =		
		new RegExp("/forum/([\\d]{4})/([\\d]{1,2})/([\\d]{1,2}).aspx");
	var matches = re.exec(window.location.href);
	
	if (matches == null)
	{
		this.month = new Date().getMonth();
		this.today = new Date().getDate();
		this.year = new Date().getFullYear();
	}
	else
	{
		this.month = matches[2]-1;
		this.today = matches[3];
		this.year = matches[1];
	}

	//
		
	this.MonthObj =
		this.calendarHead.getElementsByTagName("TH")[1];
		
	this.next = 
		this.calendarHead.getElementsByTagName("TH")[2];
		
	this.previous = 
		this.calendarHead.getElementsByTagName("TH")[0];
		
	this.createNavigation();

	var monthText = 
		document.createTextNode( this.getMonthName() + " " + String(this.year).substr(2,2));
	this.MonthObj.appendChild(monthText);
	
	
	this.getData();	
}

Calendar.prototype.callback = function(response)
{	
	this.data = response;
	this.rebuild();
}

Calendar.prototype.createNavigation = function()
{
	var next = 
	    document.createElement("img");
	//next.setAttribute("src", "/capoeira.vaom.website/images/calendar_next.gif");
	next.setAttribute("src", "/images/calendar_next.gif");
	
	var anchor = 
		document.createElement("a");
	anchor.href = "javascript: void(0);";

	anchor.appendChild(next);
	this.next.appendChild(anchor);
	
	var obj = this;
	anchor.onclick = function ()
	{
		obj.getNextMonth();
		return false;
	}
	
	//
	
	var prev = 
	    document.createElement("img");
	//prev.setAttribute("src", "/capoeira.vaom.website/images/calendar_prev.gif");
	prev.setAttribute("src", "/images/calendar_prev.gif");
	
	var anchor = 
		document.createElement("a");
	anchor.href = "javascript: void(0);";

	anchor.appendChild(prev);
	this.previous.appendChild(anchor);	
	
	var obj = this;
	anchor.onclick = function ()
	{
		obj.getPreviousMonth();
		return false;
	}
}

Calendar.prototype.rebuild = function()
{
	if( this.control != null )
	{
		Utils.RemoveChildNodes(this.calendarBody);
		
		var activeDay = 0;
		var foundFirstOfMonth = false;
		
		var firstOfMonth = new Date(this.year, this.month, 1).getDay()-1;
		if( firstOfMonth < 0 )
			firstOfMonth = 6;

		for(WeekIndex = 0; WeekIndex < 6; WeekIndex++ )
		{
			var WeekObj = 
				document.createElement("TR");
			this.calendarBody.appendChild(WeekObj);
					
			for(DayIndex = 0; DayIndex < 7; DayIndex++ )
			{
				var DayObj =
					document.createElement("TD");
				WeekObj.appendChild(DayObj);
				
				if( foundFirstOfMonth == false )
				{
					if( DayIndex == firstOfMonth )
						foundFirstOfMonth = true;
				}
				
				if( foundFirstOfMonth == true )
				{	
					activeDay += 1;
					var dayContainsPosts = false;

					var events = this.data.getElementsByTagName("event");
					for( EventIndex = 0; EventIndex < events.length; EventIndex++ )
					{
						if( events[EventIndex].childNodes[0].nodeValue == activeDay )
							dayContainsPosts = true;
					}
                    
					if( activeDay <= this.getMonthLenght()) // && this.today <= ((WeekIndex * 7) + (DayIndex+1))
					{
						if( this.today == ((WeekIndex * 7) + (DayIndex+1)) )
							DayObj.className = "today";
								
						var contents = activeDay.toString();
						//var DagensDatum = new Date().getDate();//Tommy ändrat
						if( dayContainsPosts == true)// && DagensDatum >= ((WeekIndex * 7) + (DayIndex))) //Tommy ändrat
						{
							//var url = ("/capoeira.vaom.website/forum/" + this.year + "/" + (this.month +1) + "/" + activeDay + ".aspx");
							var url = ("/forum/" + this.year + "/" + (this.month +1) + "/" + activeDay + ".aspx");
							contents = activeDay.toString().link(url);
							DayObj.className = "event";
						}
						
						DayObj.innerHTML = contents;
					}
				}
			}
		}
	}
}

Calendar.prototype.getData = function()
{
	var referenceLock = this;

	this.proxy = new AjaxProxy();
	//this.proxy.url = "http://localhost/Capoeira.Vaom.Website/Resources/CalendarEndPoint.cep"
	this.proxy.url = ("http://" + document.domain + "/Resources/CalendarEndPoint.cep");
	this.proxy.methodName = "GetPostDays";
	this.proxy.format = "xml";
	this.proxy.callback = function(){referenceLock.callback(this.requestObject.responseXML)};
	this.proxy.parameters.set("month", this.month+1);
	this.proxy.parameters.set("year", this.year);
	this.proxy.parameters.set("seed", new Date().getMilliseconds());
	this.proxy.execute();
}

Calendar.prototype.getMonthName = function()
{
	var months=
		new Array("Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December");
	return months[this.month];
}

Calendar.prototype.getMonthLenght = function()
{
	var days = 
		new Array(31, ((this.year % 4 == 0 && this.year % 100 != 0) || this.year % 400 == 0 ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	return days[this.month];
}

Calendar.prototype.getNextMonth = function()
{
	this.month += 1;
	if( this.month > 11 )
	{
		this.month = 0;
		this.year += 1;
	}
		
	Utils.RemoveChildNodes(this.MonthObj);
	var monthText = 
		document.createTextNode( this.getMonthName() + " " + String(this.year).substr(2,2));
	this.MonthObj.appendChild(monthText);
	
	this.getData();	
}

Calendar.prototype.getPreviousMonth = function()
{
	this.month -= 1;
	if( this.month < 0 )
	{
		this.month = 11;
		this.year -= 1;
	}
	
	Utils.RemoveChildNodes(this.MonthObj);
	var monthText = 
		document.createTextNode( this.getMonthName() + " " + String(this.year).substr(2,2));
	this.MonthObj.appendChild(monthText);
	
	this.getData();	
}
