function KalenderPU (element,start,beschr,tag_id,monat_id,jahr_id,klassenname)
{
	if(document.getElementById(element))
	{
		this.element = document.getElementById(element);
	}
	else
	{
		this.element = element;
	}
	this.start_text = start;
	this.wochentag = new Array("Mo","Di","Mi","Do","Fr","Sa","So");
	this.monat = new Array("Januar","Febuar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	this.kalender_div;
	this.button_sp;
	this.input_tag;
	this.input_monat;
	this.input_jahr;
	this.input_tag_id = tag_id;
	this.input_monat_id =monat_id;
	this.input_jahr_id = jahr_id;
	this.kalender_geladen = false;
	this.klassenname = (klassenname)? klassenname : "";
	this.leseStart = function()
	{
		var aus;
		var datum_sp = new Date();
		var tag = datum_sp.getDate();
		var monat = datum_sp.getMonth();
		var jahr = datum_sp.getFullYear();
		switch(true)
		{
			case /(plus )/.test(this.start_text):
				switch(true)
				{
					case /([0-9]+) (tag|tage)+/.test(this.start_text):
						tag = tag *1+ Number(RegExp.$1);
						break;
					case /([0-9]+) (monat|monate)+/.test(this.start_text):
						monat = monat *1 + Number(RegExp.$1);
						break;
					case /([0-9]+) (jahr|jahre)+/.test(this.start_text):
						jahr = jahr *1 + Number(RegExp.$1);
						break;
					default:
						aus = new Date();
				}
				break;
			case /(minus )/.test(this.start_text):
				switch(true)
				{
					case /([0-9]+) (tag|tage)+/.test(this.start_text):
						tag = tag *1- Number(RegExp.$1);
						break;
					case /([0-9]+) (monat|monate)+/.test(this.start_text):
						monat = monat *1 -Number(RegExp.$1);
						break;
					case /([0-9]+) (jahr|jahre)+/.test(this.start_text):
						jahr = jahr *1 - Number(RegExp.$1);
						break;
					default:
						aus = new Date();
				}
				break;
			default:
				switch(true)
				{
					
					case /([[0-2][0-9]|3[0,1]|[0-9]])[ -](0[1-9]|1[0-2]|[1-9])[ -]([[0-9]{4}|[0-9]{2}])/.test(this.start_text):
					monat = RegExp.$2-1;
					if(-1 == monat)
					{
						monat = 12;
					}
					jahr = RegExp.$3;
					tag = RegExp.$1
					break;	
				}
		}
		aus = new Date(jahr, monat, tag);
		return aus;
	}
	this.start = this.leseStart();
	this.beschr = beschr;
	this.tagedesMonats = function(monat,jahr)
	{
		return (32 - new Date(jahr,monat,32).getDate());
	}
	this.topLeft = function(element)
	{
		var browser_a = new Browser();
		var browser_name = browser_a.getName();
		var browser_version = browser_a.getVersionsnummer();
		var top = 0;
		var left = 0;
		if("ie" == browser_name && 7>= browser_version)
		{
			if(element.offsetParent)
			{
				do
				{
					if("relative" !=element.currentStyle.position)
					{
						top += element.offsetTop;
						left += element.offsetLeft;
					}
				}
				while((element = element.offsetParent))
			}
		}
		else
		{
			top = element.offsetTop;
			left = element.offsetLeft;
		}
		return [top,left];
	}
	this.laden = function()
	{
		while(true == this.element.hasChildNodes())
		{
			this.element.removeChild(this.element.firstChild);
		}
		this.button_sp = document.createElement("button");
		this.button_sp.className = "kalender_button "+this.klassenname;
		var button_text_sp = document.createTextNode(this.beschr);
		this.button_sp.appendChild(button_text_sp);
		this.button_sp.self = this;
		this.button_sp.onclick = function()
		{
			if(false == this.self.kalender_geladen)
			{
				this.self.kalender_geladen = true;
				this.self.kalenderLaden();
			}
			return false;
		}
		this.input_tag = document.createElement("input");
		this.input_tag.type = "hidden";
		this.input_tag.name = this.input_tag_id;
		this.input_tag.id = this.input_tag_id;
		this.input_tag.value = this.start.getDate();
		this.input_monat = document.createElement("input");
		this.input_monat.type = "hidden";
		this.input_monat.name = this.input_monat_id;
		this.input_monat.id = this.input_monat_id;
		this.input_monat.value = this.start.getMonth()+1;
		this.input_jahr = document.createElement("input");
		this.input_jahr.type = "hidden";
		this.input_jahr.name = this.input_jahr_id;
		this.input_jahr.id = this.input_jahr_id;
		this.input_jahr.value = this.start.getFullYear();
		this.element.appendChild(this.button_sp);
		this.element.appendChild(this.input_tag);
		this.element.appendChild(this.input_monat);
		this.element.appendChild(this.input_jahr);
	}
	this.kalenderLaden = function()
	{
		this.kalender_div = document.createElement("div");
		this.kalender_div.style.top = this.topLeft(this.button_sp)[0]+this.button_sp.offsetHeight/2+"px";
		this.kalender_div.style.left = this.topLeft(this.button_sp)[1]+this.button_sp.offsetWidth/2+"px";
		this.kalender_div.className = "kalender_div";
		var kalender_div_cont = document.createElement("div");
		kalender_div_cont.className = "kalender_div_cont";
		var kalender_schliessen = document.createElement("a");
		kalender_schliessen.href = "#";
		kalender_schliessen.alt = "Schließen";
		kalender_schliessen.title = "Schließen";
		kalender_schliessen.className = "kalender_schliessen_a";
		kalender_schliessen.self = this;
		kalender_schliessen.onclick = function()
		{
			this.self.kalenderEntf();
			return false;
		}
		var kalender_schliessen_text = document.createTextNode("Schließen");
		kalender_schliessen.appendChild(kalender_schliessen_text);
		var kalender_nav = document.createElement("div");
		kalender_nav.className = "kalender_nav_div";
		var zurueck_div = document.createElement("div");
		zurueck_div.className = "kalender_zurueck_div";
		var zurueck_jahr_sp = document.createElement("a");
		zurueck_jahr_sp.className = "kalender_zurueck_jahr_a";
		zurueck_jahr_sp.title = "Einen Jahr zurück";
		zurueck_jahr_sp.alt = "Einen Jahr zurück";
		zurueck_jahr_sp.href = "#";
		zurueck_jahr_sp.self = this;
		zurueck_jahr_sp.onclick = function()
		{
			this.self.start = new Date(this.self.start.getFullYear()-1,this.self.start.getMonth(),this.self.start.getDate());
			this.self.kalenderEntf();
			this.self.kalenderLaden();
			return false;
		}
		var zurueck_jahr_text_sp = document.createTextNode("<<");
		var zurueck_monat_sp = document.createElement("a");
		zurueck_monat_sp.className = "kalender_zurueck_monat_a";
		zurueck_monat_sp.title = "Einen Monat zurück";
		zurueck_monat_sp.alt = "Einen Monat zurück";
		zurueck_monat_sp.href = "#";
		zurueck_monat_sp.self = this;
		zurueck_monat_sp.onclick = function()
		{
			this.self.start = new Date(this.self.start.getFullYear(),this.self.start.getMonth()-1,this.self.start.getDate());
			this.self.kalenderEntf();
			this.self.kalenderLaden();
			return false;
		}
		var zurueck_monat_text_sp = document.createTextNode("<");
		var weiter_div = document.createElement("div");
		weiter_div.className = "kalender_weiter_div";
		var weiter_jahr_sp = document.createElement("a");
		weiter_jahr_sp.className = "kalender_weiter_jahr_a";
		weiter_jahr_sp.title = "Einen Jahr weiter";
		weiter_jahr_sp.alt = "Einen Jahr weiter";
		weiter_jahr_sp.href = "#";
		weiter_jahr_sp.self = this;
		weiter_jahr_sp.onclick = function()
		{
			this.self.start = new Date(this.self.start.getFullYear()+1,this.self.start.getMonth(),this.self.start.getDate());
			this.self.kalenderEntf();
			this.self.kalenderLaden();
			return false;
		}
		var weiter_jahr_text_sp = document.createTextNode(">>");
		var weiter_monat_sp = document.createElement("a");
		weiter_monat_sp.className = "kalender_weiter_monat_a";
		weiter_monat_sp.title = "Einen Monat weiter";
		weiter_monat_sp.alt = "Einen Monat weiter";
		weiter_monat_sp.href = "#";
		weiter_monat_sp.self = this;
		weiter_monat_sp.onclick = function()
		{
			this.self.start = new Date(this.self.start.getFullYear(),this.self.start.getMonth()+1,this.self.start.getDate());
			this.self.kalenderEntf();
			this.self.kalenderLaden();
			return false;
		}
		var weiter_monat_text_sp = document.createTextNode(">");
		var kalender_datum_div = document.createElement("div");
		kalender_datum_div.className = "kalender_datum_div";
		var kalender_monat = document.createElement("span");
		kalender_monat.className = "kalender_monat_span";
		var kalender_monat_text = document.createTextNode(this.monat[this.start.getMonth()]);
		var kalender_jahr = document.createElement("span");
		kalender_jahr.className = "kalender_jahr_span";
		var kalender_jahr_text = document.createTextNode(this.start.getFullYear());
		var kalender_tabelle = document.createElement("table");
		var kalender_tabelle_tbody = document.createElement("tbody");
		kalender_tabelle.className = "kalender_table";
		var tage_anz = this.tagedesMonats(this.start.getMonth(),this.start.getFullYear());
		var wochtentag_erster = new Date(this.start.getFullYear(),this.start.getMonth(),1).getDay()-1;
		if(-1 == wochtentag_erster) // Wenn ein Sonnatg ausgegeben wurde
		{
			wochtentag_erster = 6;
		}
		var anz_tr = Math.ceil((tage_anz+wochtentag_erster)/7);
		var tr_ue_sp = document.createElement("tr");
		for(var pos_t = 0; pos_t <7;  pos_t ++)
		{
			var th_sp = document.createElement("th");
			var th_text_sp = document.createTextNode(this.wochentag[pos_t]);
			th_sp.appendChild(th_text_sp);
			tr_ue_sp.appendChild(th_sp);
		}
		kalender_tabelle.appendChild(tr_ue_sp);
		for(var pos_tr = 0; pos_tr < anz_tr; pos_tr ++)
		{
			var tr_sp = document.createElement("tr");
			for(var pos_k = 1; pos_k <=7; pos_k ++)
			{
				var tag_sp = document.createElement("td");
				var tag_nummer = pos_k+(pos_tr*7)-wochtentag_erster;
				if(tage_anz >= tag_nummer && tag_nummer >0)
				{
					var tag_a_sp = document.createElement("a");
					tag_a_sp.title = tag_nummer+". "+ this.monat[this.start.getMonth()]+ " "+this.start.getFullYear();
					tag_a_sp.alt = tag_nummer+". "+ this.monat[this.start.getMonth()]+ " "+this.start.getFullYear();
					tag_a_sp.href = "#";
					tag_a_sp.self = this;
					tag_a_sp.tag = tag_nummer;
					tag_a_sp.monat = this.start.getMonth();
					tag_a_sp.jahr = this.start.getFullYear();
					tag_a_sp.onclick = function()
					{
						this.self.kalenderEntf();
						while(true == this.self.button_sp.hasChildNodes())
						{
							this.self.button_sp.removeChild(this.self.button_sp.firstChild);
						}
						var button_text_sp = document.createTextNode(this.self.beschr+ " "+this.tag+ ". "+this.self.monat[this.monat]+ " "+this.jahr);
					//	var button_text_nach_sp = document.createTextNode(this.tag+ ". "+this.self.monat[this.monat]+ " "+this.jahr);
						this.self.button_sp.appendChild(button_text_sp);
					//	this.self.button_sp.parentNode.insertBefore(button_text_nach_sp,this.self.button_sp.nextSibling);
						this.self.input_tag.value = this.tag;
						this.self.input_monat.value = this.monat+1;
						this.self.input_jahr.value = this.jahr;
						return false;
					}
					
					var tag_a_text_sp = document.createTextNode(tag_nummer);
					tag_a_sp.appendChild(tag_a_text_sp);
					var tag_text_sp = tag_a_sp;
				}
				else
				{
					var tag_text_sp = document.createTextNode(" ");
				}
				tag_sp.appendChild(tag_text_sp);
				tr_sp.appendChild(tag_sp);
			}
			kalender_tabelle_tbody.appendChild(tr_sp);
		}
		var heute_a = document.createElement("a");
		var heute = new Date();
		heute_a.alt = heute.getDate()+". "+this.monat[heute.getMonth()]+" "+heute.getFullYear();
		heute_a.title = heute.getDate()+". "+this.monat[heute.getMonth()]+" "+heute.getFullYear();
		heute_a.href = "#";
		heute_a.className = "kalender_heute_a";
		heute_a.self = this;
		heute_a.tag = heute.getDate();
		heute_a.monat = heute.getMonth();
		heute_a.jahr = heute.getFullYear();
		heute_a.onclick = function()
		{
			this.self.kalenderEntf();
			while(true == this.self.button_sp.hasChildNodes())
			{
				this.self.button_sp.removeChild(this.self.button_sp.firstChild);
			}
			var button_text_sp = document.createTextNode(this.self.beschr+ " "+this.tag+ ". "+this.self.monat[this.monat]+ " "+this.jahr);
			this.self.button_sp.appendChild(button_text_sp);
			this.self.input_tag.value = this.tag;
			this.self.input_monat.value = this.monat+1;
			this.self.input_jahr.value = this.jahr;
			return false;
		}
		var heute_a_text = document.createTextNode("Heute");
		heute_a.appendChild(heute_a_text);
		zurueck_jahr_sp.appendChild(zurueck_jahr_text_sp);
		zurueck_monat_sp.appendChild(zurueck_monat_text_sp);
		zurueck_div.appendChild(zurueck_jahr_sp);
		zurueck_div.appendChild(zurueck_monat_sp);
		kalender_nav.appendChild(zurueck_div);
		kalender_monat.appendChild(kalender_monat_text);
		kalender_jahr.appendChild(kalender_jahr_text);
		kalender_datum_div.appendChild(kalender_monat);
		kalender_datum_div.appendChild(kalender_jahr);
		kalender_nav.appendChild(kalender_datum_div);
		weiter_monat_sp.appendChild(weiter_monat_text_sp);
		weiter_jahr_sp.appendChild(weiter_jahr_text_sp);
		weiter_div.appendChild(weiter_monat_sp);
		weiter_div.appendChild(weiter_jahr_sp);
		kalender_nav.appendChild(weiter_div);
		kalender_div_cont.appendChild(kalender_schliessen);
		kalender_div_cont.appendChild(kalender_nav);
		kalender_div_cont.appendChild(kalender_tabelle);
		kalender_div_cont.appendChild(heute_a);
		kalender_tabelle.appendChild(kalender_tabelle_tbody);
		this.kalender_div.appendChild(kalender_div_cont);
		this.element.appendChild(this.kalender_div);
	}
	this.kalenderEntf = function()
	{
		this.kalender_div.parentNode.removeChild(this.kalender_div);
		this.kalender_geladen = false;
	}
	this.datum_voreinstellen = function()
	{
		var tag = this.start.getDate();
		var monat = this.start.getMonth();
		var jahr = this.start.getFullYear();
		while(true == this.button_sp.hasChildNodes())
		{
			this.button_sp.removeChild(this.button_sp.firstChild);
		}
		var button_text_sp = document.createTextNode(this.beschr+ " "+tag+ ". "+this.monat[monat]+ " "+jahr);
		//var button_text_nach_sp = document.createTextNode(tag+ ". "+this.monat[monat]+ " "+jahr);
		this.button_sp.appendChild(button_text_sp);
		//this.button_sp.parentNode.insertBefore(button_text_nach_sp,this.button_sp.nextSibling);
		this.input_tag.value = tag;
		this.input_monat.value = monat+1;
		this.input_jahr.value = jahr;
	}
}
