	// this function determines whether the event is the equivalent of the microsoft
// mouseleave or mouseenter events.
function isMouseLeaveOrEnter(e, handler)
{		
	if (e.type != 'mouseout' && e.type != 'mouseover') return false;
	var reltg = e.relatedTarget ? e.relatedTarget :
	e.type == 'mouseout' ? e.toElement : e.fromElement;
	while (reltg && reltg != handler) reltg = reltg.parentNode;
	return (reltg != handler);
}
	
	
	
	var monthLen=new Array('31','28','31','30','31','30','31','31','30','31','30','31');
	var monthLenLeap=new Array('31','29','31','30','31','30','31','31','30','31','30','31');
	var monthNames = new Object();
	monthNames['en'] = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	monthNames['cat'] = new Array('Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny','Juliol','Agost','Setembre','Octubre','Novembre','Desembre');	
	var dayNames = new Object();
	dayNames['en'] = new Array('S','M','T','W','T','F','S');
	dayNames['cat'] = new Array('dm','dl','dt','dc','dj','dv','ds');
	var visibleEvent;
	var weekStartDay = 1;
	function setUpCal(lang, mn, yr){
	
		var zindex = 100;
		// first fill in the day names
		var dNamesDiv = document.getElementById('day-names');
		var dNamesHtml = ''
		for(i=0; i < 7; i++){
			dNamesHtml+='<span ';
			if(i==0) dNamesHtml += 'class="first"';
			dNamesHtml +='/>';
			dNamesHtml += dayNames[lang][(weekStartDay+i)%7];
			dNamesHtml +='</span>';
		}
		dNamesDiv.innerHTML = dNamesHtml;
	
		var ref = new Date();
		if(mn!=undefined) ref.setMonth(mn);
		if(yr){
			if(mn < 0) yr-=1;
			else if(mn > 11) yr += 1;
			ref.setFullYear(yr);
		}
		ref.setDate(1);
		var startIndex = (7 + ref.getDay() - weekStartDay) %7;
		var daysInMonth = (yr%4==0?monthLenLeap[ref.getMonth()]:monthLen[ref.getMonth()]);
		var daysDiv = document.getElementById('calendar_days');
		var calHtml = "";
		var refDate = 0;
		for(i = 0; (i%7!=0 || refDate < daysInMonth) && i < 50; i++){
			var theDate = '&nbsp'
			var eventDiv = null;
			if(i >= startIndex && refDate < daysInMonth){
				refDate++;
				theDate = refDate;
				var dayStr = (refDate < 10?'0':'') + refDate;
				var mnStr = (ref.getMonth() < 9?'0':'') + (ref.getMonth()+1);
				eventDiv = document.getElementById('event_' + dayStr + '-' + mnStr + '-' + ref.getFullYear());			
			}
			if(eventDiv){
				calHtml += '<span style="z-index:' + zindex-- + '" class="active';
				if(eventDiv.className.indexOf('naranja')>-1){
					calHtml+= ' naranja';				
				}
				if(i%7==0){
					calHtml+= ' first';
				}
				calHtml += '" onmouseover="showEvent(this, \'';
				calHtml += eventDiv.id + '\'); return;" >'+ theDate + '</span>\n';
			}else{
				calHtml += '<span ';
				if(i%7==0){
					calHtml+= 'class="first"';
				}
				calHtml += ' >' + theDate + '</span>\n';
			}				
		}
		daysDiv.innerHTML=calHtml;
		document.getElementById('month_title').innerHTML = monthNames[lang][ref.getMonth()] + ' ' + ref.getFullYear();
		document.getElementById('prev_month').onclick = function(){
			setUpCal(lang, ref.getMonth() - 1, ref.getFullYear());
			return false;
		};
		document.getElementById('next_month').onclick = function(){
			setUpCal(lang, ref.getMonth() +1, ref.getFullYear(), lang);
			return false;
		};
	}
	
	function showEvent(daydiv, divname){
		if(!visibleEvent){
			var div = document.getElementById(divname);
			if(div){
				var newDiv = div.cloneNode(true);
				daydiv.appendChild(newDiv);
				newDiv.style.display='block';
				newDiv.onmouseout=function(evt){
					if(!evt){
						evt = window.event;
					}
					if(isMouseLeaveOrEnter(evt,this)){
						hideEvent();
					}
				};
				visibleEvent = newDiv;
			}
		}
	}
	
	function hideEvent(){
		visibleEvent.parentNode.removeChild(visibleEvent);
		visibleEvent = null;
	}