//functions for front end

var dataloadedfor, datatobeloadedfor, rssItems, rssItemNum;
var _loadMonth,_hasEvent,_cellClick,_cellOver;

var enmonth3=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dec');

_loadMonth = function(date) {
	if(dataloadedfor && dataloadedfor.getMonth()==date.getMonth() && dataloadedfor.getYear()==date.getYear())
		return false;
	
	datatobeloadedfor=new Date(date.getTime());
	new Ajax.Request('calendar/events.xml.php',{method:'get',parameters:'date='+(date.getMonth()+1)+'.'+((isplus1900?1900:0)+date.getYear())+'&r='+Math.floor(Math.random()*10), onComplete:dataLoaded});
	
	return true;
}

function dataLoaded(xmlDoc) {
	dataloadedfor=datatobeloadedfor;
	datatobeloadedfor=null;
	rssItems=xmlDoc.responseXML.getElementsByTagName('item');
	rssItemNum=0;
	updateView($('calview'));
}

function formatDate(date) {
	var matches=/^\w{3}, (\d+) (\w{3}) (\d+) (\d{2}):(\d{2}):\d{2} ([+-]?\d+)/.exec(date);
	matches[2]=enmonth3.indexOf(matches[2])+1;
	return matches[1]+'/'+matches[2]+'/'+matches[3]+' ore '+(/*matches[6]/100+*/parseInt(matches[4]))+':'+matches[5];

}

function getEventsFor(day) {
	if(day<10)
		day='0'+day;
	else
		day=''+day;
	var i=0, result=new Array();
	while(i<rssItems.length && getElement('pubDate',rssItems[i]).substring(5,7)!=day) {
		++i;
	}
	var first=true;
	while(i<rssItems.length && getElement('pubDate',rssItems[i]).substring(5,7)==day) {
		result.push(Builder.node('div',{className:'evt'},[
			Builder.node('span',{className:'date'},formatDate(getElement('pubDate',rssItems[i]))),
			Builder.node('h2',{},[
				Builder.node('a',{href:getElement('link',rssItems[i])},getElement('title',rssItems[i])+' >>')
				])
			])
		);
		result[result.length-1].className+=' first';
		++i;
		first=false;
	}	
	return result;
}

_hasEvent = function (day) {
	if(day<10)
		day='0'+day;
	else
		day=''+day;
	var found=false;
	while(rssItemNum<rssItems.length && getElement('pubDate',rssItems[rssItemNum]).substring(5,7)==day) {
		found=true;
		rssItemNum++;
	}
	return found;
}

function findPosX(obj) {
	var curleft=0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft+=obj.offsetLeft
			obj=obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft+=obj.x;
	return curleft;
}

function findPosY(obj) {
	var curtop=0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop+=obj.offsetTop
			obj=obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop+=obj.y;
	return curtop;
}

var overel=null;

function removeover(elem) {
	af=function() {
		elem.parentNode.removeChild(elem);
	}
	Effect.Fade(elem,{afterFinish:af});
	overel=null;
}

_cellOver = function() {
	if(overel!=null) {
		if(overel.day && overel.day==this.firstChild.nodeValue)
			return;
		removeover(overel);
	}
	overel=Builder.node('div',{className:'calover'},getEventsFor(this.firstChild.nodeValue));
	overel.day=this.firstChild.nodeValue;
	overel.style.display='none';
	overel.style.left=findPosX(this)+'px';
	overel.style.top=findPosY(this)+'px';
	overel.onmouseover=overover;
	overel.onmousemove=overover;
	overel.onmouseout=overout;
	document.getElementsByTagName('body')[0].appendChild(overel);
	Effect.Appear(overel);
}

function overover() {
	if(this.timeout && this.timeout!=null) {
		clearTimeout(this.timeout);
		this.timeout=null;
	}
}

function overout() {
	thediv=this;
	this.timeout=setTimeout(function() {removeover(thediv);}, 500);
}

function getElement(elem,container) {
	var el=container.getElementsByTagName(elem);
	if(el && el.length>0 && el[0].firstChild) {
		if(el[0].firstChild.nodeType==4) //cdata
			return el[0].firstChild.data;
		else
			return el[0].firstChild.nodeValue;
	}
	return '';
}