var day_names = ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'];
var month_names = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'];
myEvents = new Array();

function monthLength(month,year) {
	var dd = new Date(year, month, 0);
	return dd.getDate();
}

function setCell(f,day,col,current) {
	var c = [];
	var t = '<td';
	var now = new Date();

	if(isDateEqual(now,current)) c.push('current');

	sJour = current.getDate();

	if(sJour < 10){
		sJour = '0' + sJour;
	}

	sMois = (current.getMonth()+1);

	if(sMois < 10){
		sMois = '0' + sMois;
	}

	var sDate = sJour + "/" + sMois + "/" + current.getFullYear().toString();


	if (jQuery.inArray(sDate, myEvents) != -1){
		c.push('event');
		day = '<a href="/agenda/'+dept+'/'+current.getFullYear().toString()+'/'+sMois+'/'+sJour+'"><span>'+day+'</span></a>';
	}
	else {
       day = '<span>'+day+'</span>';
	}

	if (f==0) c.push('previous');

	if (col==0 || col==6) c.push('weekend');

	if (f==9) c.push('next');

	if (c.length>0) t+=' class="'+c.join(' ')+'"';

	t += '>'+day+'<\/td>\n';

	return t;
}

function nextMonth(d){
	return new Date(d.getFullYear(),d.getMonth()-1,1);
}

function prevMonth(d){
	return new Date(d.getFullYear(),d.getMonth()+1,1);
}

function nextDate(d){
	return new Date(d.getFullYear(),d.getMonth(),d.getDate()+1);
}

function prevDate(d){
	return new Date(d.getFullYear(),d.getMonth(),d.getDate()-1);
}

function isDateEqual(date1,date2)
{
	dateStart = date1.getDate()+'/'+date1.getMonth()+'/'+date1.getFullYear();
	dateEnd = date2.getDate()+'/'+date2.getMonth()+'/'+date2.getFullYear();

	if(dateStart == dateEnd){
		return true;
	} else {
		return false;
	}
}

function getEvents(year,month){

	dept = jQuery("#dept").val();
	var url = '/agenda/find-events/year/' + year + '/month/' + month + '/dept/' + dept;

	jQuery.ajax({
		type: "GET",
		url: url,
		async: false,
		dataType: 'json',
		success: function(data){
			jQuery.each(data, function(i,item){
				myEvents.push(item);
			});
		}
	});

	return myEvents;
}

function setCal(m,y) {
	if (y < 1901 || y > 2100) {alert('year must be after 1900 and before 2101'); return false;}

	var m = parseInt(m,10);
	var y = parseInt(y,10);
	var currentDate = new Date();
	currentDate.setDate(1);
	currentDate.setMonth(m);
	currentDate.setFullYear(y);

	// get events;
	getEvents(y,m+1);

	// jour début semaine ( 1 => lundi)
	var startingDay = parseInt(1,10);
	var startDay = (currentDate.getDay()-startingDay)%7

	if(startDay < 0){
		startDay +=7;
	}

	var dm = monthLength(m,y);
	var cal = '<table id="cal">\n';

	// header
	var nextDate = nextMonth(currentDate);
	var prevDate = prevMonth(currentDate);
    cal += '<thead>\n';
	cal += '<tr id="cal-head">\n';
	cal += '<td colspan="2" id="cal-prev"><a href="" onclick="setCal(' + nextDate.getMonth() + ',' + nextDate.getFullYear() + '); return false;"><span>&lt; precedent</span><\/a><\/td>\n';
	cal += '<td colspan="3" id="cal-mth"><strong><span>' + month_names[currentDate.getMonth()].toLowerCase() + '</span> ' + currentDate.getFullYear() + '<\/strong><\/td>\n';
	cal += '<td colspan="2" id="cal-next"><a href="" onclick="setCal(' + prevDate.getMonth() + ',' + prevDate.getFullYear() + '); return false;"><span>suivant &gt;</span></a><\/td>\n';
	cal += '<\/tr>\n';

	// days headers
	cal += '<tr id="cal-days">\n';
	for (var i=0;i<7;i++) {
		cal+= '<td';
		if ((i+startingDay)%7==0 || (i+startingDay)%7==6){
			cal+= ' class="weekend"';
		}
		cal+= '>'+day_names[(i+startingDay)%7]+'<\/td>\n';
	}

	// days closing headers
	cal += '<\/tr>\n';
	cal += '<\/thead>\n';

	cal += '<tbody id="cal-body">\n';
	cal += '<tr>\n';

	// jour du mois précédent
	for (var i=startDay; i>0; i--) {
		day = dm-i+1;
		c = new Date(y,m-1,day);
		cal += setCell(0,day,(startDay-i+startingDay)%7,c);
	}

	// jour du mois
	dm = monthLength(m+1,y);
	for(var i=1; i <= dm; i++) {
		if((startDay%7)==0) {
			cal += '<\/tr><tr>\n';
			startDay = 0;
		}
		c = new Date(y,m,i);
		cal += setCell(1,i,(startDay+startingDay)%7,c);
		startDay++;
	}

	// jour mois suivant
	var j=1;
	for (var i=startDay;i<7;i++) {
		c = new Date(y,m+1,j);
		cal += setCell(9,j,(i+startingDay)%7,c);
		j++;
	}

	cal += '<\/tr>\n<\/tbody>\n<\/table>';

	document.getElementById('cal-wrap').innerHTML = cal;

}