/* USAGE:

		// Build Calendar		
		this.calendar = new CalendarClass();
		this.calendar.name = this.name + '.calendar';
		this.calendar.id = this.id + 'calendar';
		this.calendar.month = now.getMonth() + 1;
		this.calendar.year = now.getFullYear();
		this.calendar.eventHandler = this;
		this.calendar.init();
*/


function CalendarClass() {
	var calendarDays = new Array;
	var selectionStart = false;
	var currentDaySelected = false;
	
	this.init = function() {
		this.buildContainer();

    	this.refreshCalendar();
    }
    
    this.prev = function() {
    	if(this.month > 1) {
    		this.month--;
    	} else {
    		this.month = 12;
    		this.year--;
    	}
      	
		this.buildContainer();

    	this.refreshCalendar();
    }
    
    this.next = function() {
    	if(this.month < 12) {
    		this.month++;
    	} else {
    		this.month = 1;
    		this.year++;
    	}
    	    	
		this.buildContainer();

    	this.refreshCalendar();
    }
    
    this.refreshCalendar = function() {
    	currentDaySelected = false;
		var calendarYearToDisplayString = this.year + '';
		var calendarNumericMonthToDisplay = this.month - 1;
		
		var calendarDate = new Date();
		
		var months = new Array("Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
		var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 
		
		document.getElementById(this.id + "calendarTitle").innerHTML = months[calendarNumericMonthToDisplay] + " '" + calendarYearToDisplayString.slice(2);
		
		if(calendarNumericMonthToDisplay==0) {
			calendarDate.setFullYear(this.year - 1);
			calendarDate.setMonth(11);		
		} else {
			calendarDate.setFullYear(this.year);
			calendarDate.setMonth(calendarNumericMonthToDisplay - 1);
		}
		
		if((!(this.year % 4) && (this.year % 100)) || !(this.year % 400)) {
			daysInMonth[1] = 29;
		}

		if(calendarNumericMonthToDisplay!=0) {
			calendarDate.setDate(daysInMonth[calendarNumericMonthToDisplay-1]-5);
		} else {
			calendarDate.setDate(daysInMonth[11]-5);
		}
		
		calendarDayOfMonth = calendarDate.getDate();
		calendarMonth = calendarDate.getMonth() + 1;
		
		var addDay = false;
		z1 = 0;
		while(true) {
			if(calendarDate.getDay() == 1) {
				addDay = true;
			}
						
			if(addDay) {
				var calendarDay = document.createElement("DIV");
				calendarDay.id = this.id + "calendarDay" + z1;
				if(calendarDate.getMonth() == calendarNumericMonthToDisplay) {
					className = "calendarDay";
				} else {
					className = "calendarDay inactive";				
				}
				
				calendarDay.className = className;
				
				calendarDay.innerHTML = calendarDayOfMonth;
				
				eval("calendarDay.onclick = function() { " + this.name + ".clickedCalendarDay(" + z1 + "); };");				
				eval("calendarDay.onmouseover = function() { " + this.name + ".highlightCalendarDay(" + z1 + ", 'calendarDay hovered'); };");
				eval("calendarDay.onmouseout = function() { " + this.name + ".highlightCalendarDay(" + z1 + ", '" + className + "'); };");				
				eval("calendarDay.onmousedown = function(event) { " + this.name + ".mouseDownCalendarDay(event, " + z1 + "); };");			
				eval("calendarDay.onmouseup = function() { " + this.name + ".mouseUpCalendarDay(" + z1 + "); };");			
				
		    	document.getElementById(this.id).appendChild(calendarDay);
		    	calendarDays[z1] = new Array;
		    	calendarDays[z1]["Day"] = calendarDate.getDate();
		    	calendarDays[z1]["Month"] = calendarDate.getMonth() + 1;
		    	calendarDays[z1]["Year"] = calendarDate.getFullYear();
		    	calendarDays[z1]["ClassName"] = className;
		    	calendarDays[z1]["InSelection"] = false;
		    	z1++;			
		    	
		    	if(z1 == 42) {
		    		break;
		    	}
			}
			
			calendarDayOfMonth++;
			
			if(calendarDayOfMonth > daysInMonth[calendarDate.getMonth()]) {
				calendarMonth = calendarDate.getMonth();
				calendarDate.setDate(1);
				calendarDayOfMonth = 1;
				
				if(calendarMonth!=11) {
					calendarDate.setMonth(calendarMonth + 1);
				} else {
					calendarDate.setMonth(0);
					if(this.year <= calendarDate.getFullYear()) {
						calendarDate.setFullYear(this.year + 1);
					} else {
						calendarDate.setFullYear(this.year);					
					}
				}
			} else {
				calendarDate.setDate(calendarDayOfMonth);
			}
		}    
    }
    
    this.highlightCalendarDay = function(id, className) {
    	if(!selectionStart) {
	    	if(currentDaySelected!=id && !calendarDays[id]["InSelection"]) {
	    		document.getElementById(this.id + "calendarDay" + id).className = className;
			} else {
				if(document.getElementById(this.id + "calendarDay" + id).className == 'calendarDaySelectedHover') {
					document.getElementById(this.id + "calendarDay" + id).className = 'calendarDaySelectedHover'
				} else {
					document.getElementById(this.id + "calendarDay" + id).className == 'calendarDay selected'				
				}			
			}
		} else {
			if(id > selectionStart) {
				for(z1=0;z1<calendarDays.length;z1++) {
					if(z1>=selectionStart && z1 <= id) {
						document.getElementById(this.id + "calendarDay" + z1).className = 'calendarDay selected';
						calendarDays[z1]["InSelection"] = true;					
					} else {
						document.getElementById(this.id + "calendarDay" + z1).className = calendarDays[z1]["ClassName"];
						calendarDays[z1]["InSelection"] = false;
					}
				}
			} else {
				for(z1=0;z1<calendarDays.length;z1++) {
					if(z1<=selectionStart && z1 >= id) {
						document.getElementById(this.id + "calendarDay" + z1).className = 'calendarDay selected';
						calendarDays[z1]["InSelection"] = true;					
					} else {
						document.getElementById(this.id + "calendarDay" + z1).className = calendarDays[z1]["ClassName"];
						calendarDays[z1]["InSelection"] = false;
					}
				}			
			}   

		}
    }
    
    this.clickedCalendarDay = function(id) {
		for(z1=0;z1<calendarDays.length;z1++) {
			document.getElementById(this.id + "calendarDay" + z1).className = calendarDays[z1]["ClassName"];
			calendarDays[z1]["InSelection"] = false;
		}
		
    	if(currentDaySelected != id && id!=false) {
	    	currentDaySelected = id;
	    	
	    	document.getElementById(this.id + "calendarDay" + id).className = 'calendarDay selected';    	   	
    		this.eventHandler.selectedDate(calendarDays[id], false);
    	} else {
    		currentDaySelected = false;
    		this.eventHandler.selectedDate(false);
    	}
    }
    
    
    this.reset = function() {
    	this.clickedCalendarDay(false);
    }
    
    this.mouseDownCalendarDay = function(evt, id) {
    	 evt.preventDefault();
    	
    	selectionStart = id;	
    }
    
    this.mouseUpCalendarDay = function(id) {
    	if(selectionStart) {
    		if(id < selectionStart) {
    			startDate = calendarDays[id];
    			stopDate = calendarDays[selectionStart];
    		} else {
     			startDate = calendarDays[selectionStart];
    			stopDate = calendarDays[id];   		
    		}
    		this.eventHandler.selectedDate(startDate, stopDate);
    		selectionStart = false;
    	}
    }
    
    this.buildContainer = function() {
		document.getElementById(this.id).innerHTML = '';	    	
    	var calendarHeader = document.createElement("DIV");
    	calendarHeader.id = this.id + "calendarHeader";
    	calendarHeader.className = "calendarHeader";

		var calendarLeftArrow = document.createElement("DIV");
		calendarLeftArrow.id = this.id + "calendarLeftArrow";
		calendarLeftArrow.className = "calendarLeftArrow";
		calendarLeftArrow.innerHTML = "<a href='JavaScript:" + this.name + ".prev();'><img src='/images/style/arrows/greyArrowLeftActive.gif' /></a>";
		calendarHeader.appendChild(calendarLeftArrow);
		
		var calendarRightArrow = document.createElement("DIV");
		calendarRightArrow.id = this.id + "calendarRightArrow";
		calendarRightArrow.className = "calendarRightArrow";
		calendarRightArrow.innerHTML = "<a href='JavaScript:" + this.name + ".next();'><img src='/images/style/arrows/greyArrowRightActive.gif' /></a>";
		calendarHeader.appendChild(calendarRightArrow);

		var calendarTitle = document.createElement("DIV");
		calendarTitle.id = this.id + "calendarTitle";
		calendarTitle.className = "calendarTitle";
		calendarHeader.appendChild(calendarTitle);

    	document.getElementById(this.id).appendChild(calendarHeader);
    	
    	var calendarBody = document.createElement("DIV");
    	calendarBody.id = this.id + "calendarBody";
    	calendarBody.className = "calendarBody";
	
		var weekDaysShort = new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
		
		for(z1=0;z1<weekDaysShort.length;z1++) {
			var calendarDay = document.createElement("DIV");
			calendarDay.id = this.id + "calendarDayHeader";
			calendarDay.className = "calendarDayHeader";
			calendarDay.innerHTML = weekDaysShort[z1];
		    calendarBody.appendChild(calendarDay);	
		}
   
    	document.getElementById(this.id).appendChild(calendarBody);	    	    	    	    
    }
}

function calendarCalendarjs() {}
