/// calendar by berki

var MondayFirst = true
var myDuration = 0.5
var mySpace = 30
var myTransition = Effect.Transitions.sinoidal
var calendarClick = true

var myDays = new Array()
myDays[0] = 'Mon'
myDays[1] = 'Tue'
myDays[2] = 'Wed'
myDays[3] = 'Thu'
myDays[4] = 'Fri'
myDays[5] = 'Sat'
myDays[6] = 'Sun'

var myMonths = new Array('Hónap', 'Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December')

function showMonth(direction){
	
	new Ajax.Request('/cal_conn.php', {
			method: 'post',
			parameters: {year:currentYear,month:currentMonth},
			onSuccess: function(request) {
				if(request.responseText !== 'error'){
					$('monthCont').innerHTML = ''
					genDays('monthCont', request.responseXML, direction)
				}
			}
		});
	
}

function genDays(myContainer, dataXml, direction){
	
	var dataArray = xmlToArray(dataXml)
	//alert(dataArray[0])
	
	var printMonthDays = new Array()
	
	var year = currentYear
	var month =currentMonth
	var daysInMonth = getDaysInMonth(year, month)
	
	var today = new Date();
	
	var date = new Date();
	date.setFullYear(year);
	date.setMonth(month-1,1);
	
	var restBefore = firsDayInWeek(year, month)
	var restAfter = 7 - lastDayInWeek(year, month)
	
	var yearB = year; if(month == 1){yearB == year-1}
	var monthB = month; if(month == 1){monthB == 12}
	var daysInMonthB = getDaysInMonth(yearB, monthB-1); if(month == 1){daysInMonthB = getDaysInMonth(yearB, monthB)}
	
	var dateB = new Date(); dateB.setFullYear(yearB); dateB.setMonth(monthB-2,1);
	for(var b=daysInMonthB-restBefore+1; b<daysInMonthB+1; b++){
		dateB.setDate(b); printMonthDays.push(new Date(dateB));
	}
	
	for(var d=1; d<daysInMonth+1; d++){
		date.setDate(d); printMonthDays.push(new Date(date));
	}
	
	var dateA = new Date(); dateA.setFullYear(year); dateA.setMonth(month,1);
	for(var b=1; b<restAfter; b++){
		dateA.setDate(b); printMonthDays.push(new Date(dateA));
	}

	var myClass = 'datecont'
	var extData = 'background:#FEBA11; '
	var dataId
	for(var r=0; r<printMonthDays.length; r++){
		if(printMonthDays[r].getMonth() == (month-1)){myClass = 'datecont bold';}else{myClass = 'datecont'}
		var PrintData_month = ((printMonthDays[r].getMonth()+1) < 10) ? '0'+(printMonthDays[r].getMonth()+1) : (printMonthDays[r].getMonth()+1);
		var PrintData_day = (printMonthDays[r].getDate() < 10) ? '0'+printMonthDays[r].getDate() : printMonthDays[r].getDate();
		dataId = printMonthDays[r].getFullYear()+''+PrintData_month+''+PrintData_day;
		dataId = parseInt(dataId)
		
		var PrintToday_month = ((today.getMonth()+1) < 10) ? '0'+(today.getMonth()+1) : (today.getMonth()+1);
		var PrintToday_day = (today.getDate() < 10) ? '0'+today.getDate() : today.getDate();
		//todayId = today.getFullYear()+''+PrintToday_month+''+PrintToday_month
		todayId = today.getFullYear()+''+PrintToday_month+''+PrintToday_day;
		todayId = parseInt(todayId)
		
		
		
		if(todayId == dataId){myClass = myClass + ' today'}
		
		if(dataArray[dataId] !== undefined){
			extData = 'background:#FEBA11 '
		}else if(printMonthDays[r].getDay() == 0 || printMonthDays[r].getDay() == 6){
			extData = 'background:#DFDFDF '
		}else{
			extData = ''
		}
		
		
		new Insertion.Bottom(myContainer, '<a href="/kalendarium/'+dataId+'"><span style="'+extData+'" class="'+myClass+'">'+printMonthDays[r].getDate()+'</span></a>');

	}
	
	$('calendarInfo').innerHTML = myMonths[currentMonth]
	
	var startpos = 0
	if(direction == 'next'){startpos = mySpace}
	if(direction == 'prev'){startpos = -1*mySpace}
	
	$('monthCont').style.left = startpos+'px'
	new Effect.Appear('monthCont', { duration: myDuration, transition: myTransition });
	new Effect.Move('monthCont', { x: 0, y:0, mode: 'absolute', duration: myDuration, transition: myTransition });
}


function xmlToArray(xml){
	var retArray = new Array()
	xmlDoc = xml;
	xml_days = xmlDoc.getElementsByTagName('day')
	
	var id
	var data
	
	for(var x=0; x<xml_days.length; x++){
		id = xml_days[x].getElementsByTagName("id")[0].childNodes[0].nodeValue
		data = xml_days[x].getElementsByTagName("data")[0].childNodes[0].nodeValue
		retArray[id] = data
	}
	
	return retArray
}


function calendarNextMonth(){
	if(calendarClick){
		calendarClick = false
		if(currentMonth == 12){
			currentYear = currentYear+1
			currentMonth = 1
		}else{
			currentMonth = currentMonth+1
		}
		
		new Effect.Fade('monthCont', { duration: myDuration, transition: myTransition });
		new Effect.Move('monthCont', { x: -1*mySpace, y:0, mode: 'absolute', duration: myDuration, transition: myTransition, afterFinish: function(){showMonth('next'); calendarClick = true;}});
	}

}

function calendarPrevMonth(){
	if(calendarClick){
		calendarClick = false
		if(currentMonth == 1){
			currentYear = currentYear-1
			currentMonth = 12
		}else{
			currentMonth = currentMonth-1
		}
		
		
		new Effect.Fade('monthCont', { duration: myDuration, transition: myTransition });
		new Effect.Move('monthCont', { x: mySpace, y:0, mode: 'absolute', duration: myDuration, transition: myTransition, afterFinish: function(){showMonth('prev'); calendarClick = true;}});
	}
	
}


function firsDayInWeek(year, month){
	var day = 0; 
	month = month-1; var d = new Date();
	d.setFullYear(year); d.setMonth(month,1);
	d.setDate(1)
	
	day = d.getDay()
	if(MondayFirst){day = day-1;if(day == -1){day = 6};}
	return day
}

function lastDayInWeek(year, month){
	var day = 0; 
	month = month; var d = new Date();
	d.setFullYear(year); d.setMonth(month,1);
	d.setDate(0)
	
	day = d.getDay()
	if(MondayFirst){day = day-1;if(day == -1){day = 6};}
	return day
}

function  getDaysInMonth(year, month){
	var days = 0; month = month-1; var d = new Date();
	d.setFullYear(year); d.setMonth(month,1);
	for(var n=27; n<33; n++){days = n; d.setDate(n);if(d.getMonth() > month){break;}}
	return days-1
}
