			
			var cal = new cCalender();
			var months = new Array("Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez");					
			
					
			
			function cCalender()
			{
				this.year = 0;
				this.month = 0;
				
				this.anker = null;
				this.target = null;
				
				
				this.start = function(obj, obj2)
				{				
					var now = new Date();
					
					this.year = now.getFullYear();
					this.month = now.getMonth()
					this.target = obj;
					
					this.build();
					
					
					this.anker = $("calMain");
										
					Element.extend(obj2);
					var pos = Position.cumulativeOffset(obj2);
					var dim = obj2.getDimensions();
					this.anker.style.left = pos[0];
					this.anker.style.top = pos[1] + dim.height;
					
					
					this.anker.style.display == "none" ? this.anker.style.display = "" : this.anker.style.display = "none";
					toggleSelect();
				}
				
				
				this.build = function()
				{
					if($("calMain") == null)
					{
						var div = Builder.node("div", {id: "calMain", style: "position:absolute; top: 0px; left: 0px; display:none; border: 2px solid black;"}, [
							Builder.node("table", {bgcolor: "#FFFFFF", width: "150px"}, [
								Builder.node("tbody", [
									Builder.node("tr", [
										Builder.node("td", {align: "left"}, [
											Builder.node("a", {href: "javascript: cal.dec();"}, "<<")
										]),
										Builder.node("td", {id: "calYear", align: "center"}),
										Builder.node("td", {align: "right"}, [
											Builder.node("a", {href: "javascript: cal.inc();"}, ">>")
										])
									])
								])
							]),
							Builder.node("table", {bgcolor: "#FFFFFF", width: "150px"}, [
								Builder.node("tbody", [
									Builder.node("tr", [
										Builder.node("td", {colspan: "3", align: "center"}, [
											Builder.node("table", [
												Builder.node("tbody", {id: "mainCalTable"})
											])
										])
									]),
									Builder.node("tr", [
										Builder.node("td", {colspan: "3", align: "center"}, [
											Builder.node("a", {href: "javascript: void(0)", onclick: "$('calMain').hide(); toggleSelect();"}, "Schließen")
										])
									])
								])
							])																													
						]);
						
						document.body.appendChild(div);
					}
					
					
					var first = new Date(this.year, this.month, 1, 12, 0, 0);
					
					var weekday = (first.getDay() != 0) ? first.getDay() : 7;
					var year = first.getFullYear();
					var month = first.getMonth();
					
					var day = 1;
					var rows = 0;
					
					$("calYear").update(months[month] + ' ' + year);
					
					var mainCal = $("mainCalTable");
					
					mainCal.update();
					new Insertion.Bottom(mainCal, '<TR><TD>M</TD><TD>D</TD><TD>M</TD><TD>D</TD><TD>F</TD><TD style="color: red;">S</TD><TD style="color: red;">S</TD></TR>');
					new Insertion.Bottom(mainCal, '<TR id="row0"></TR>');
					rows++;
					
										
					var row = $("row0");
					var rowCon = "";
					for(var i = 1; i <= 7; i++)
					{
						var akt = new Date(year, month, day, 12, 0, 0);
						
						if(i >= weekday)
						{
							rowCon += this.cell(akt);
							day++;
						}
						else
							rowCon += '<TD>&nbsp;</TD>';
					}
					
					
					for(; day <= 31; day++)
					{
						var akt = new Date(year, month, day, 12, 0, 0);
						
						if(akt.getMonth() != month)
							break;
					
						if(akt.getDay() == 1)
						{
							row.update(rowCon);
							rowCon = "";
							
							new Insertion.Bottom(mainCal, '<TR id="row' + rows + '"></TR>');
							row = $("row" + rows);
							rows++;
						}
							
						rowCon += this.cell(akt);
					}
					
					if(rowCon.length > 0)
						row.update(rowCon);
				}
				
				
				this.cell = function(date)
				{
					var now = new Date();
					
					if(date.getTime() > new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime())
					{
						var str = '<TD class="datecell"><a href="javascript: cal.ret(' + date.getDate() + '); toggleSelect();">' + date.getDate() + '</a></TD>';					
					}
					else
					{
						var str = '<TD class="datecell">' + date.getDate() + '</TD>';
					}
					
					return str;
				}
				
				
				this.dec = function()
				{
					this.month--;
					
					if(this.month < 0)
					{
						this.month = 11;
						this.year--;
					}
						
					this.build();
				}
				
				
				this.inc = function()
				{
					this.month++;
					
					if(this.month > 11)
					{
						this.month = 0;
						this.year++;
					}
						
					this.build();
				}
				
				
				this.ret = function(day)
				{ 
					var str = (day < 10) ? "0" + day : day;
					str += ".";
					str += (this.month < 9) ? "0" + (this.month+1) : (this.month+1);
					str += ".";
					str += this.year;
					
					this.target.value = str;
					this.hide();
				}
				
				
				this.hide = function()
				{
					this.anker.style.display = "none";
				}
			}
			
			
			function getPosition(element)
			{
				var elem = element;
				var tagname = "";
				var x = 0;
				var y = 0;
				  
				  
				while((typeof(elem) == "object") && (typeof(elem.tagName) != "undefined"))
				{
					y += elem.offsetTop;     
					x += elem.offsetLeft;    
					tagname = elem.tagName.toUpperCase();
				
					if(tagname=="BODY")
						elem=0;
				
					if(typeof(elem) == "object")
						if (typeof(elem.offsetParent) == "object")
							elem = elem.offsetParent;
				 }
				
	
				 position = new Object();
				 position.x = x;
				 position.y = y;
				 return position;
			}
			
			
			function toggleSelect()
			{
				Element.extend(document.body);
				var sel = document.body.getElementsBySelector("select");
				
				for(var i = 0; i < sel.length; i++)
				{
					switch(sel[i].style.visibility)
					{
						case "visible":
							sel[i].style.visibility = "hidden";
							break;
							
						case "hidden":
							sel[i].style.visibility = "visible";
							break;
					}
				}
			}