// script (c) copyright http://www.aleto.christian krebs aka aleto
// This work is licensed under the Creative Commons Attribution License. To  view a
// copy of this license, visit http://creativecommons.org/licenses/by/1.0/  or send
// a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,  California 94305,
// USA.

var allMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var deltaMonthZero=0;
var deltaMonth=0;
var numberOfMonthToDisplay=1;
var newDate=new Date();
var yearZero=newDate.getFullYear();
var monthZero=newDate.getMonth();
var dayOfWeek=newDate.getDay();
var day=newDate.getDate();
var currentDay=0, currentDayZero=0;
var month='', year='';
var dateValue='', dateValueRep='', dateValueDay='', dateValueMonth='';
function calenderplus() {deltaMonthZero++; deltaMonth+=deltaMonthZero; calender()};
function calenderminus() {deltaMonthZero--; deltaMonth+=deltaMonthZero; calender()};
function calendermore() {numberOfMonthToDisplay++; calender()};
function newElement(type, attrs, content, toNode) {
	var ele=document.createElement(type);
	if(attrs) for(var i=0; i<attrs.length; i++) 
			eval('ele.'+attrs[i][0]+(attrs[i][2] ? '=\u0027' :'=')+attrs[i][1]+(attrs[i][2] ? '\u0027' :''));
	if(content) ele.appendChild(document.createTextNode(content));
	if(toNode) toNode.appendChild(ele);
	return ele;
}
function calenderThis() {
	var val=document.getElementById('thisYear').value;	
	val-=0;
	val-=yearZero;
	val*=12;
	val-=monthZero;
	deltaMonth=val;
	numberOfMonthToDisplay=12;
	calender();
}
function calender() {
	var parentEle=document.getElementById("container");
	parentEle.innerHTML='';	
	function check(){
		if(year%4==0&&(year%100!=0||year%400==0))allMonth[1]=29;
		else allMonth[1]=28;
	}
	function addClass (name) { if(!currentClass){currentClass=name} else {currentClass+=' '+name} };
	for(c=0; c<numberOfMonthToDisplay; c++){
		currentDay=day-dayOfWeek;
		month=monthZero; 
		year=yearZero;
		check();
		if(deltaMonth<0){
			for(i=0; i>deltaMonth; i--){
				month-=1;
				if(month<0){month+=12;year-=1}
				check();
				currentDay+=allMonth[month]-35; 
				if(currentDay<-7){currentDay+=7}
			}
		}
		if(deltaMonth>0){
			for(i=0; i<deltaMonth; i++){
				currentDay+=28-allMonth[month]; 
				if(currentDay<-7){currentDay+=7}
				month+=1;
				if(month>11){month-=12;year+=1};
				check();
			}
		}
		currentDay%=7;
		if(currentDay>0){currentDay-=7}
		currentDayZero=currentDay;
		var legendText='';
		var newMonth=newElement('table', false, false, parentEle);
		var newMonthBody=newElement('tbody', false, false, newMonth);
		var tr=newElement('tr', [['className','head',1]], false, newMonthBody);
		var td=newElement('td', [['colSpan','7',1]], false, tr);
		var h3=newElement('h3', [['className','month',1]], allNameOfMonths[month], td);
		h3=newElement('h3', [['className','year',1]], year, td);
		tr=newElement('tr', [['className','weekdays',1]], false, newMonthBody);
		for(i=0;i<7;i++) td=newElement('td', false, allNameOfWeekDays[i], tr);	
		tr=newElement('tr', [['className','week',1]], false, newMonthBody);
		for(i=0; i<allMonth[month]-currentDayZero; i++){
			var currentClass=false;			
			currentDay++;
			if(currentDay==day && month==monthZero && year==yearZero) addClass ('today');
			if(caption=="yes"){			
				currentDay < 10 ? dateValueDay="0"+currentDay : dateValueDay=currentDay;
				month+1 < 10 ? dateValueMonth="0"+(month+1) : dateValueMonth=(month+1);
				dateValue=dateValueDay+"."+dateValueMonth+"."+year;
				dateValueRep=dateValueDay+"."+dateValueMonth+"."+"rep";
				if(holidays.indexOf(dateValue)!=-1||holidays.indexOf(dateValueRep)!=-1){
					addClass ('holiday');
					var re2=new RegExp('(('+dateValueDay+'\.'+dateValueMonth+'\.rep)|('+dateValueDay+'\.'+dateValueMonth+'\.'+year+')) *([^;]*);','');
					legendText+=' '+currentDay+'.\u00A0'+re2.exec(holidays)[4]+' ';
				}
			}
			if(currentDay <= 0 ) {
				if(currentDayZero!=-7) td=newElement('td', false, false, tr);
			}
			else {
				if((currentDay-currentDayZero)%7==0) addClass ('holiday');
				td=newElement('td', (!currentClass ? false : [['className',currentClass,1]] ), currentDay, tr);
				if((currentDay-currentDayZero)%7==0) tr=newElement('tr', [['className','week',1]], false, newMonthBody);
			}
			if(i==allMonth[month]-currentDayZero-1){
				i++;
				while(i%7!=0){i++;td=newElement('td', false, false, tr)};
			}
		}
		deltaMonth++;
		if(legendText.length>0) {
			tr=newElement('tr', [['className','legend',1]], false, newMonthBody);
			td=newElement('td', [['colSpan','7',1]], legendText, tr);
		}
	}
	deltaMonth=0;

}