/* usemedia.com . joes koppers . 08.2007 */
/* thnx for reading this code */


//mediaguild calendar

Layout.prototype.addCalendar = function()
{
	var obj = this;
	var today = new Date();
	
	this.calendar = 
	{
		div: document.getElementById('item_calendar'),
		year: today.getFullYear(),
		month: today.getMonth(),
		years: new Object(),
		
		init: function(resp)
		{
			//range (for navigation)
			this.first_year = resp.items[0].y;
			this.last_year = resp.items[resp.items.length-1].y;

			//add months
			for (var i in resp.items) this.addMonth(resp.items[i].id,resp.items[i].y,resp.items[i].m-1,resp.items[i].d);

			//add current (actual) month if needed
			if (!this.years[this.year] || !this.years[this.year].months[this.month]) this.addMonth(false,this.year,this.month);

			//draw 7x5 day grid
			var div = document.getElementById('calendar');
			for (var d=0; d<5*7; d++)
			{
				var block = document.createElement('div');
				div.appendChild(block);
			}

			//labels
			if (mg.lan=='nl')
			{
				var days = ['maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag','zondag'];
				this.month_names = ['Januari','Februari','Maart','April','Mei','Juni','Juli','Augustus','September','Oktober','November','December'];
			}
			else
			{
				var days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'];
				this.month_names = ['January','February','March','April','May','June','July','August','September','October','November','December'];
			}
			var str = '<div style="position:absolute; left:246px; width:200px; top:-32px; font-size:12px; font-weight:bold; text-align:center"></div>';
			for (var day in days) str+= '<div>'+days[day]+'</div>';
			document.getElementById('calendar_header').innerHTML = str;

			var nav = (mg.lan=='nl')? 'blader':'browse';
			document.getElementById('calendar_nav').childNodes[1].innerHTML = nav;

			this.display();
		},
		
		addMonth: function(id,y,m,d)
		{
			if (!this.years[y]) this.years[y] = { months: new Object() };
			if (!this.years[y].months[m]) this.years[y].months[m] = { days: new Object() };
			//events for this month
			if (id)
			{
				if (!this.years[y].months[m].days[d]) this.years[y].months[m].days[d] = { events: [] };
				
				//get event title and short
				var itemdiv = document.getElementById('item_'+id);
				var evnt = {
					id: id,
					title: itemdiv.childNodes[0].innerHTML,
					intro: itemdiv.childNodes[1].innerHTML
				}
				
				this.years[y].months[m].days[d].events.push(evnt);
			}
		},
		
		display: function(y,m)
		{
			if (!y)
			{
				var y = this.year;
				var m = this.month;
			}
			else
			{
				this.year = y;
				this.month = m;
			}

			//show grid
			this.div.style.display = 'block';
			
			//get first day offset and month length
			var first = new Date(y,m,0).getDay();
			var days = new Date(y,m+1,0).getDate(); //next month, day 0 = last day this month
			if (first==0) first = 6;

			//add days and events			
			var day = 1;
			var today = new Date();
			for (var d=0; d<5*7; d++)
			{
				var block = document.getElementById('calendar').childNodes[d];
				if (d>=first && d<first+days)
				{
					block.innerHTML = '<h1>'+day+'</h1>';
					if (y==today.getFullYear() && m==today.getMonth() && day==today.getDate())
					{
						var now = (mg.lan=='nl')? 'vandaag, ':'today, ';
						block.innerHTML = '<h1 style="color:#00b1f2">'+now+day+'</h1>';
					}
					block.style.backgroundColor = 'white';
					//add events if any
					if (this.years[y].months[m].days[day])
					{
						var str = '';
						var events = this.years[y].months[m].days[day].events
						for (var i in events)
						{
							str+= '<p>';
							str+= '<span>&bull;</span> ';
							str+= '<a href="javascript://view_item" title="'+events[i].intro+'" ';
							str+= 'onclick="mg.expand('+events[i].id+')"';
							var title = (events[i].title.length>26)? events[i].title.substring(0,26)+'..':events[i].title;
							str+= '>'+title+'</a>';
							str+= '</p>';
						}
					 	block.innerHTML += str;
					}
					day++;
				}
				else
				{
					block.style.backgroundColor = '';
					block.innerHTML = '';
				}
			}
			
			//add month/year label
			document.getElementById('calendar_header').firstChild.innerHTML = this.month_names[this.month]+' '+this.year;
			
			this.updateNavigation();
		},
		
		hide: function()
		{
			this.div.style.display = 'none';
		},
		
		updateNavigation: function()
		{
			var obj = this;
			var nav = document.getElementById('calendar_nav');

			//next button?
			var f = this.findNext(this.year);
			if (f)
			{
				nav.firstChild.style.visibility = 'inherit';
				eval('nav.firstChild.onclick = function() { obj.display('+f[0]+','+f[1]+') }');
	 			mg.drawNavButton(nav.firstChild.getContext('2d'),'#373737','right');
			}
			else nav.firstChild.style.visibility = 'hidden';

			//previous button?
			var f = this.findPrev(this.year);
			if (f)
			{
				nav.lastChild.style.visibility = 'inherit';
				eval('nav.lastChild.onclick = function() { obj.display('+f[0]+','+f[1]+') }');
	 			mg.drawNavButton(nav.lastChild.getContext('2d'),'#373737','left');
			}
			else nav.lastChild.style.visibility = 'hidden';
		},
		
		findNext: function(y)
		{
			var found = undefined;
			var start = (y==this.year)? this.month+1:0;
			for (var m=start; m<12; m++)
			{
				if (this.years[y].months[m])
				{
					found = m;
					break;
				}
			}
			if (found==undefined)
			{
				//try next year
				if (y<this.last_year) return this.findNext(y+1);
			}
			else return [y,found];
		},
		
		findPrev: function(y)
		{
			var found = undefined;
			var start = (y==this.year)? this.month-1:12;
			for (var m=start; m>=0; m--)
			{
				if (this.years[y].months[m])
				{
					found = m;
					break;
				}
			}
			if (found==undefined)
			{
				//try previous year
				if (y>this.first_year) return this.findPrev(y-1);
			}
			else return [y,found];
		}
	}
	
	//get calendar items and init
	db.get('calendar_items',function(resp) { obj.calendar.init(resp) },'lan',this.lan);
}